def _getTotalPrice(self, default=0.0, context=None, fast=0): """ Returns the total price for this line, this line contains, or the cells it contains. if hasLineContent: return sum of lines total price if hasCellContent: return sum of cells total price else: return quantity * price if fast argument is true, inventory API will be used. """ if fast: kw = {} kw['section_uid'] = self.getDestinationSectionUid() kw['stock.explanation_uid'] = self.getExplanationUid() kw['relative_url'] = ( '%s/%%' % ( self.getRelativeUrl().replace('_', '\\_')), self.getRelativeUrl() ) kw['only_accountable'] = False return self.getPortalObject().portal_simulation.getInventoryAssetPrice(**kw) if self.hasLineContent(): meta_type = self.meta_type return sum(l.getTotalPrice(context=context) for l in self.objectValues() if l.meta_type==meta_type) elif not self.hasCellContent(base_id='movement'): return Movement._getTotalPrice(self, default=default, context=context) return sum(cell.getTotalPrice(default=0.0, context=context) for cell in self.getCellValueList())
def _edit(self, edit_order=(), **kw): # XXX FIXME For now, special cases are handled in _edit methods in many # documents : DeliveryLine, DeliveryCell ... Ideally, to prevent code # duplication, it should be handled in a _edit method present only in # Amount.py # If variations and resources are set at the same time, resource must be # set before any variation. before_order = ('resource', 'resource_value', 'variation_base_category_list', 'variation_category_list') before_kw = {k: kw.pop(k) for k in before_order if k in kw} if before_kw: before_kw.update((k, kw[k]) for k in edit_args_list if k in kw) Base._edit(self, edit_order=before_order, **before_kw) if kw: Movement._edit(self, edit_order=edit_order, **kw)
def getDivergenceList(self): """Returns a list of messages that contains the divergences for that line and the cells it may contain. """ if self.hasCellContent(): divergence_list = [] for cell in self.objectValues(portal_type=self.getPortalObject() .getPortalDeliveryMovementTypeList()): divergence_list += cell.getDivergenceList() return divergence_list else: return Movement.getDivergenceList(self)
def getPrice(self, *args, **kw): """ call Movement.getPrice """ return Movement.getPrice(self, *args, **kw)
def getTotalPrice(self, default=0.0, *args, **kw): """ call Movement.getTotalPrice """ return Movement.getTotalPrice(self, default=default, *args, **kw)
def manage_beforeDelete(self, item, container): "if the container is a line too, reindex it" if self.meta_type == container.meta_type: container.reindexObject() return Movement.manage_beforeDelete(self, item, container)
def getInventoriatedQuantity(self): """ """ return Movement.getInventoriatedQuantity(self)
def getInventoriatedQuantity(self): """ Take into account efficiency in converted target quantity """ return Movement.getInventoriatedQuantity(self)