Paul McNett wrote:
> Ed Leafe wrote:
>> On Oct 10, 2008, at 6:45 PM, Paul McNett wrote:
>>
>>> File "/home/pmcnett/py/sbs/shutter_studio/trunk/clients/ 
>>> shutter_studio/ui/FrmProductionOrders.py", line 41, in new
>>>   self.newProductionOrder()
>>> File "/home/pmcnett/py/sbs/shutter_studio/trunk/clients/ 
>>> shutter_studio/ui/FrmProductionOrders.py", line 60, in  
>>> newProductionOrder
>>>   self.getBizobj("production_orders").new(dlg.Fields)
>>> File "/home/pmcnett/py/sbs/shutter_studio/trunk/clients/ 
>>> shutter_studio/biz/orders.py", line 141, in new
>>>   self.save()
>>
>>      This is the part that confuses me: it looks like you're calling  
>> new(), and then saving a different object immediately, before the new  
>> process has finished for the first bizobj. Is the record being saved  
>> in orders.py a new or existing record?
> 
> I've overridden the new() method in my bizobj. Here's the code:
> 
> 103   def new(self, fields=None):
> 104     if fields is None:
> 105       fields = {}
> 106     self.super()
> 107     for k, v in fields.items():
> 108       self.setFieldVal(k, v)
> 109     needed = []
> 110     for neededField in (("cust_id", "Customer"),
> 111                         ("material_type_id", "Material type"),
> 112                         ("sidemark", "Sidemark")):
> 113       if not self.getFieldVal(neededField[0]):
> 114         needed.append("%s needed." % neededField[1])
> 115 
> 116     if not self.getFieldVal("prod_cust_id"):
> 117       if self.Application.showProductLines():
> 118         # refuse it.
> 119         needed.append("Product Line needed.")
> 120       else:
> 121         # Set it to the default.
> 122         cust_id = self.Record.cust_id
> 123         if cust_id:
> 124           default = self.getDefaultProdCust(cust_id)
> 125           if default:
> 126             self.Record.prod_cust_id = default
> 127           else:
> 128             # Should never happen, as all customers should have a default 
> product line.
> 129             needed.append("Product Line needed.")
> 130         else:
> 131           # Won't work anyway because there's no customer chosen.
> 132           pass
> 133     if needed:
> 134       self.cancel()
> 135       raise dException.BusinessRuleViolation, "\n".join(needed)
> 136 
> 137     self.Record.status_id = 10
> 138     self.Record.order_date = datetime.date.today()
> 139     self.fillCustomerAddressFields()
> 140     self.fillDerivedFields()
> 141     self.save()
> 
> The purpose is to make sure that certain required fields are filled in 
> immediately. If the required fields aren't filled in, then we cancel the new 
> record immediately. Else, we save().

The following patch appears to fix my issue, but I'm not entirely sure why:

{{{
Index: dCursorMixin.py
===================================================================
--- dCursorMixin.py     (revision 4559)
+++ dCursorMixin.py     (working copy)
@@ -1367,6 +1367,7 @@
                        # didn't exist
                        pass
 
+               del rec[kons.CURSOR_TMPKEY_FIELD]
 
        def getDataDiff(self, allRows=False):
                """Create a compact representation of all the modified records
}}}

Another question I have is if it is possible to maintain *either* the 
_newRecords dict *or* the new record flag, but not both, as it seems to be a 
redundancy. I put the _newRecords dict there for performance reasons (to avoid 
having to iterate _records to find out if new records exist) but if it is 
better to maintain the flag instead we should remove _newRecords.

Paul




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: http://leafe.com/archives/byMID/[EMAIL PROTECTED]

Reply via email to