diff --git a/product/ERP5SyncML/Conduit/ERP5ShopOrderConduit.py b/product/ERP5SyncML/Conduit/ERP5ShopOrderConduit.py index a75e59ad1a74f3f5395739f947ece29ef2c85e35..617d911c0eae5519f27cb6759c0bfebd6e539b7a 100755 --- a/product/ERP5SyncML/Conduit/ERP5ShopOrderConduit.py +++ b/product/ERP5SyncML/Conduit/ERP5ShopOrderConduit.py @@ -75,6 +75,7 @@ class ERP5ShopOrderConduit(ERP5Conduit): if portal_type == 'Shop Order': # The random part of the id can be removed. It's only used for the developpement #new_object_id = 'storever-' + object_id + '-' + str(random.randint(1000, 9999)) + #new_object_id = 'storever-' + object_id subobject = object.newContent( portal_type = 'Sale Order' , id = new_object_id) # And we must set the destination and destination_section to Nexedi @@ -379,15 +380,15 @@ class ERP5ShopOrderConduit(ERP5Conduit): # Define the previous customer structure previous_owner_type = '' if person_object != None: - previous_owner_type += 'p' + previous_owner_type = 'p' if org_object != None: - previous_owner_type += 'o' + previous_owner_type = 'o' # Organisation is more important than the person # This is a particular case where the user put # the name of an organisation in his own name if not kw.has_key('organisation'): kw['organisation'] = org_object.getId() - if len(previous_owner_type) == 0: - previous_owner_type = None + #if len(previous_owner_type) == 0: + # previous_owner_type = None LOG("Previous customer structure >>>>>>>>",0,repr(previous_owner_type)) # Try to know the type of the current storever customer @@ -405,7 +406,10 @@ class ERP5ShopOrderConduit(ERP5Conduit): # # TODO : in this part of the script, add the possibility to find an existing # # ERP5 person/organisation according to the name of that person/organisation # Compare the current representation of the member account with the previous one - if previous_owner_type != owner_type: + #if previous_owner_type != owner_type: # XXX Seb: I guess it's quite strange to compare "po" to "poo" + # There is probably an error here, so I changed it but + # I'm sure I'm not really doing what it was intended for + if previous_owner_type is None and owner_type is not None: # There is difference between the two (previous and current) representation of the customer # We have to manage the differences to create a unique customer representation LOG("There is difference between previous and current >>>>>>>>",0,'') @@ -466,7 +470,7 @@ class ERP5ShopOrderConduit(ERP5Conduit): # op --> p pass else: - if previous_owner_type == None or owner_type == None: + if owner_type == None: # There is not enough informations to know if the customer is an organisation or # a person and there is no previous record # By default, we consider the customer as a person, so we have to force to create one @@ -500,8 +504,12 @@ class ERP5ShopOrderConduit(ERP5Conduit): # machin = getattr (object, methos) # method(machin) - machin = self.updateObjProperty(person_object, 'DefaultAddressStreetAddress', kw, 'address') - LOG("My new updateObjProperty() return >>>>>>>>",0,repr(machin)) + if person_object is None: + person_object = person_folder.newContent( portal_type = 'Person' + , id = owner_id) + LOG("new person created >>>>>>>>",0,repr(org_object)) + #machin = self.updateObjProperty(person_object, 'DefaultAddressStreetAddress', kw, 'address') + #LOG("My new updateObjProperty() return >>>>>>>>",0,repr(machin)) # if kw.has_key('address') and kw['address'] != None: # previous_address = person_object.getDefaultAddressStreetAddress() @@ -541,21 +549,30 @@ class ERP5ShopOrderConduit(ERP5Conduit): # We have to find a title to have something to show in the RelationField of the SaleOrderForm person_object.setTitle(owner_account_id.title()) # The Person is subordinated to an Organisation ? - if owner_type.find('o') != -1: + if owner_type.find('o') != -1 and previous_owner_type =='o': # # TODO : fix this # person_object.setSubordination("organisation/" + owner_id) if kw.has_key('organisation') and kw['organisation'] != None: org_object.setTitle(kw['organisation'].title()) org_object.setCorporateName(kw['organisation'].title()) if kw.has_key('eu_vat') and kw['eu_vat'] != None: - org_object.setEuVatCode(kw['eu_vat']) + org_object.setVatCode(kw['eu_vat']) # Test for debug if (not (kw.has_key('organisation')) or (kw.has_key('organisation') and kw['organisation'] != None)) and (not (kw.has_key('eu_vat')) or (kw.has_key('eu_vat') and kw['eu_vat'] != None)): LOG("AARRGG ! Big conflict detected : this organisation has no title or eu_vat. These properties are primary key to deduced that the storever member account was an organisation >>>>>>>>>>", 0, '') org_object.setRole("client") # The customer is not a person or a person of an organisation, so the customer is an organisation... - else: + # XXX Seb: So like it was defined, if we have a person from an organisation, then + # the organisation is not modified, so the vat is not defined!! + # This is good to replace the person with an organisation, because vat is only + # defined on organisation. An update would be to define when we have both organisation + # and person the destination_administration XXX + if owner_type.find('o') != -1: + if org_object is None: + org_object = org_folder.newContent( portal_type = 'Organisation' + , id = owner_id) + LOG("new organisation created >>>>>>>>",0,repr(org_object)) # Link the customer with the Sale Order object.setDestination("organisation/" + owner_id) object.setDestinationSection("organisation/" + owner_id) @@ -565,12 +582,13 @@ class ERP5ShopOrderConduit(ERP5Conduit): org_object.setCorporateName(kw['organisation'].title()) org_object.setRole("client") if kw.has_key('eu_vat') and kw['eu_vat'] != None: - org_object.setEuVatCode(kw['eu_vat']) + org_object.setVatCode(kw['eu_vat']) if kw.has_key('address') and kw['address'] != None: org_object.setDefaultAddressStreetAddress(kw['address'].title()) if kw.has_key('city') and kw['city'] != None: org_object.setDefaultAddressCity(kw['city'].title()) - org_object.setDefaultAddressZipCode(kw['zipcode']) + if kw.has_key('zipcode') and kw['zipcode'] != None: + org_object.setDefaultAddressZipCode(kw['zipcode']) # Search the country in the region category if kw['country'] != None: region_path = self.countrySearch(erp5_site, None, kw['country']) @@ -635,9 +653,17 @@ class ERP5ShopOrderConduit(ERP5Conduit): # shipment_object = erp5_site.restrictedTraverse(shipment_path) # Create a new order line in this order to represent the shipment service - ship_order_line_id = "storever-" + shipment_id + last_line_num = self.getLastOrderLineNumber(object) + ship_order_line_id = "storever-" + str(last_line_num +1 ) # XXX This may fail. + # It is possible to already have + # a line with this id + LOG('ERP5ShopOrderConduit, object',0,object.getPath()) + LOG('ERP5ShopOrderConduit, objectIds',0,[x for x in object.objectIds()]) + LOG('ERP5ShopOrderConduit, will create ship_order_line_id',0,ship_order_line_id) ship_order_object = object.newContent( portal_type = 'Sale Order Line' , id = ship_order_line_id) + # Don't give id, it will be set + # automatically. ship_order_object.setQuantity(1.0) ship_order_object.setPrice(kw['send_fee']) ship_order_object.setQuantityUnit('unit')