def main(): with dbapi.session: for x in dbapi.search(ProdItem): prod_id = get_real_prod_id(x.prod_id) itemgroup = dbapi.getone(ProdItemGroup, prod_id=prod_id) if itemgroup: dbapi.update(x, {'itemgroupid': itemgroup.uid}) else: print prod_id
def main(): with dbapi.session: for x in dbapi.search(ProdItem): prod_id = get_real_prod_id(x.prod_id) itemgroup = dbapi.getone(ProdItemGroup, prod_id=prod_id) if itemgroup: dbapi.update(x, {'itemgroupid': itemgroup.uid}) else: print prod_id
def items_to_transaction(self, dbapi): for item in self.items: proditem = dbapi.getone(ProdItem, prod_id=item.prod.prod_id) # TODO: deprecate use of upi at all inv_id = item.prod.upi or self.meta.bodega_id yield InventoryMovement( from_inv_id=inv_id, to_inv_id=-1, quantity=(item.cant * item.prod.multiplicador), prod_id=get_real_prod_id(item.prod.prod_id), itemgroup_id=proditem.itemgroupid, type=InvMovementType.SALE, reference_id=str(self.meta.uid), )
def get_sale_report_full(invapi, start, end): invs = invapi.search_metadata_by_date_range(start, end, status=Status.COMITTED) report = SaleReport() prod_sale_map = defaultdict(ProdSale) visitors = set() for inv in invs: datestr = inv.timestamp.date().isoformat() if inv.almacen_id == 2: report.mayor[datestr] += Decimal(inv.subtotal - (inv.discount or 0)) / 100 if inv.almacen_id in (1, 3): report.menor[datestr] += Decimal(inv.subtotal - (inv.discount or 0)) / 100 report.menor_inv_count[datestr] += 1 visitors.add(inv.client.codigo) inv_full = invapi.get_doc_from_file(inv.items_location) for item in inv_full.items: cod = get_real_prod_id(item.prod.prod_id) prod_sale_map[cod].prod = item.prod.nombre prod_sale_map[cod].cant += item.cant * (item.prod.multiplicador or 1) prod_sale_map[cod].value += item.cant * Decimal(item.prod.precio2 or item.prod.precio1) / 100 report.best_sellers = prod_sale_map.items() report.unique_visitors = len(visitors) return report