Example #1
0
 def make_inv_movement(self, work):
     invmeta = InvMovementMeta()
     doc = work.content
     if work.objtype == WorkObject.INV_TRANS:
         invmeta.timestamp = doc.meta.timestamp
         invmeta.value_usd = Decimal(doc.meta.subtotal - (doc.meta.discount or 0)) / 100
         invmeta.inventory_docid = doc.meta.uid
         invmeta.trans_type = InvMovementType.SALE
         invmeta.origin = doc.meta.bodega_id
         invmeta.dest = -1
     else:
         invmeta.timestamp = doc.meta.timestamp
         invmeta.value_usd = doc.meta.value
         invmeta.inventory_docid = doc.meta.uid
         invmeta.origin = doc.meta.origin
         invmeta.dest = doc.meta.dest
         invmeta.trans_type = transtype_to_invtype(doc.meta.trans_type)
     invmeta.inventory_codename = self.codename
     items = []
     if work.action == WorkObject.DELETE:
         invmeta.origin, invmeta.dest = invmeta.dest, invmeta.origin
         invmeta.trans_type = InvMovementType.delete_type(invmeta.trans_type)
         invmeta.timestamp = datetime.datetime.now()  # record delete time which is different than invoice time
     for trans in doc.items_to_transaction(self.dbapi):
         itemgroup = self.dbapi.get(trans.itemgroup_id, ProdItemGroup)
         items.append(ItemGroupCant(cant=trans.quantity, itemgroup=itemgroup))
     return InvMovementFull(meta=invmeta, items=items)
Example #2
0
 def _set_status_and_update_prod_count(
         self, doc, new_status, inverse_transaction):
     session = self.db_session.session
     now = datetime.datetime.now()
     try:
         items = list(doc.items_to_transaction(self.dbapi))
         for i in items:
             if inverse_transaction:
                 i.type = InvMovementType.delete_type(i.type)
                 i.inverse()
             i.timestamp = now
         self.transaction.bulk_save(items)
         session.query(self.db_class).filter_by(
             id=doc.meta.uid).update({'status': new_status})
         session.commit()
         doc.meta.status = new_status
         return True
     except SQLAlchemyError:
         import traceback
         traceback.print_exc()
         session.rollback()
         return False