| Class | DisplayService |
| In: |
lib/design_api.rb
|
| Parent: | DesignSubService |
book として与えられたデータで関連する画面情報を置き換える。
# File lib/design_api.rb, line 1103
1103: def export(book)
1104: raise NoSuchProduct if !book.product_id || book.product_id == 0
1105: domain_id = book.client_identifier_y
1106: product = Product.find(book.product_id)
1107: # update or add displays
1108: did = false
1109: dids = []
1110: book.main_sheet.display_items.each do |display_item|
1111: display_id = display_item.display_id
1112: proc = lambda do |display|
1113: DisplayStruct::DisplayItem::REGULAR_MEMBER.each do |k,|
1114: display.__send__("#{k}=", display_item.__send__(k))
1115: end
1116: if display.new_record?
1117: display.save!
1118: did = display.id # the latest display is expected to have new items as followed.
1119: # copy items from the existing display.
1120: source_display = display.class.find_by_product_id(book.product_id)
1121: if source_display
1122: source_display.items.each {|item| item.private_copy(did)}
1123: end
1124: end
1125: display_item.display_names.each do |n|
1126: lang = Language.find(n.language_id)
1127: display.__send__("name_#{lang.code}=", n.display_name)
1128: end
1129: display.save!
1130: dids << display.id
1131: end
1132: if !display_id || display_id == 0
1133: # add a new one
1134: display = "#{display_item.type}".constantize.new(:domain_id => domain_id,
1135: :product_id => book.product_id,
1136: :name_po => 0,
1137: :code => display_item.code)
1138: proc.call(display)
1139: else
1140: display = Display.find(display_id)
1141: # update the existing one
1142: type = display.attributes["type"]
1143: unless type == display_item.type
1144: raise NoSuchDisplay, "type mismatch: #{type} vs #{display_item.type}"
1145: end
1146: proc.call(display)
1147: end
1148: end
1149: # delete the inherent ones
1150: edids = Display.find(:all, :conditions => {
1151: :product_id => book.product_id,
1152: :type => %w|DisplayToList DisplayToShow DisplayToEdit DisplayToNew|,
1153: }).map(&:id)
1154: Display.delete(edids - dids)
1155: # update or add items
1156: iids = []
1157: [:new, :edit, :show, :list].each_with_index do |k,i|
1158: sheet = book.__send__("#{k}_sheet")
1159: sheet_items = sheet.__send__("#{k}_items")
1160: sheet_items.each do |sheet_item|
1161: item_id = sheet_item.item_id
1162: proc = lambda do |item|
1163: sheet_item.class::REGULAR_MEMBER.each do |m,|
1164: item.__send__("#{m}=", sheet_item.__send__(m))
1165: end
1166: item.save!
1167: iids << item.id
1168: end
1169: if !item_id || item_id == 0
1170: item_class = sheet_item.type.constantize
1171: display_id = book.main_sheet.display_items[i].display_id || did
1172: po_message = PoMessageSingular.create!(:domain_id => domain_id,
1173: :msgctxt => "Application|",
1174: :msgid => "Item|#{sheet_item.code}")
1175: item = item_class.new(:domain_id => domain_id,
1176: :display_id => display_id,
1177: :name_po => po_message.id)
1178: proc.call(item)
1179: else
1180: item = Item.find(item_id)
1181: proc.call(item)
1182: end
1183: end
1184: end
1185: book.item_sheet.items.each(&:label_item)
1186: # delete the inherent ones
1187: eiids = Item.find(:all, :conditions => {:display_id => dids}).map(&:id)
1188: Item.delete(eiids - iids)
1189: return product.to_book.succeed
1190: end