def deserialize(cls, the_dict): if 'name' in the_dict['prod'] and 'prod_id' in the_dict['prod']: prod = ProdItemGroup.deserialize(the_dict['prod']) else: price = PriceList.deserialize(the_dict['prod']) prod = ProdItemGroup(prod_id=price.prod_id, name=price.nombre) cant = Decimal(the_dict['cant']) return cls(prod, cant)
def create_full_item_from_dict(dbapi, content): """ input format: { "prod" : {prod_id, name, desc, base_unit}< - information on item group "items": [multiplier, unit "prices": { "display_name": "price1": "price2": "cant": }, ... ]<- information on items requires multiplier be distinct } must be called within dbcontext """ itemgroup = ProdItemGroup() itemgroup.merge_from(content["prod"]) itemgroupid = dbapi.create(itemgroup) items = {} allstores = {x.almacen_id: x for x in dbapi.search(Store)} for item in content["items"]: prices = item["prices"] del item["prices"] i = ProdItem() i.merge_from(item) i.itemgroupid = itemgroupid if i.multiplier == 1: i.prod_id = itemgroup.prod_id elif i.multiplier > 1: i.prod_id = itemgroup.prod_id + "+" elif i.multiplier < 1: i.prod_id = itemgroup.prod_id + "-" item_id = dbapi.create(i) items[i.unit] = i # create prices for alm_id, p in prices.items(): price = PriceList() price.nombre = p["display_name"] price.precio1 = int(float(p["price1"]) * 100) price.precio2 = int(float(p["price2"]) * 100) price.cant_mayorista = p["cant"] price.prod_id = i.prod_id price.unidad = i.unit price.almacen_id = int(alm_id) price.multiplicador = i.multiplier dbapi.create(price)
def make_item_group(pricelist): ig = ProdItemGroup() ig.prod_id = pricelist.prod_id ig.name = pricelist.nombre ig.desc = '' ig.baseunit = 'unidad' ig.base_price_usd = Decimal(pricelist.precio2) / 100 return ig
def make_item_group(prod_id, pricelist): if prod_id in prep_item_group: ig = prep_item_group[prod_id] else: ig = ProdItemGroup() ig.desc = "" ig.baseunit = "unidad" ig.base_price_usd = Decimal(pricelist.precio2) / 100 ig.prod_id = pricelist.prod_id ig.name = pricelist.nombre return ig
def post_raw_inv_movement(): raw_data = json.loads(request.body.read()) ig = ProdItemGroup.deserialize(raw_data[0]) trans = map(InventoryMovement.deserialize, raw_data[1]) codename = raw_data[2] if dbapi.getone(ProdItemGroup, prod_id=ig.prod_id) is None: if dbapi.get(ig.uid, ProdItemGroup) is not None: # prod_id does not exist but uid is used so we cannot create # using the same uid ig.uid = None dbapi.create(ig) for i in trans: i.itemgroup_id = ig.uid if dbapi.getone(Inventory, entity_codename=codename, external_id=i.from_inv_id) is None: # create new Inventory if none i.from_inv_id = get_or_create_inventory_id(dbapi, codename, i.from_inv_id) i.to_inv_id = get_or_create_inventory_id(dbapi, codename, i.to_inv_id) i.reference_id = codename + (i.reference_id or '') inventoryapi.save(i)
def create_full_item_from_dict(dbapi, content): """ input format: { "prod" : {prod_id, name, desc, base_unit}< - information on item group "items": [multiplier, unit "prices": { "display_name": "price1": "price2": "cant": }, ... ]<- information on items requires multiplier be distinct } must be called within dbcontext """ itemgroup = ProdItemGroup() itemgroup.merge_from(content['prod']) itemgroupid = dbapi.create(itemgroup) prod = Product() prod.nombre = itemgroup.name prod.codigo = itemgroup.prod_id dbapi.create(prod) items = {} inventories = {} allstores = {x.almacen_id: x for x in dbapi.search(Store)} conts = {} for bod in dbapi.search(Bodega): if bod.id == -1: continue contenido = ProdCount() contenido.bodega_id = bod.id contenido.prod_id = itemgroup.prod_id contenido.cant = 0 contenido.precio = 0 contenido.precio2 = 0 cid = dbapi.create(contenido) conts[bod.id] = cid for item in content['items']: prices = item['prices'] del item['prices'] i = ProdItem() i.merge_from(item) i.itemgroupid = itemgroupid if i.multiplier == 1: i.prod_id = itemgroup.prod_id elif i.multiplier > 1: i.prod_id = itemgroup.prod_id + '+' elif i.multiplier < 1: i.prod_id = itemgroup.prod_id + '-' item_id = dbapi.create(i) items[i.unit] = i # create bodega invs = {} for bod in dbapi.search(Bodega): if bod.id == -1: continue inv = Inventory() inv.item_id = item_id inv.bodega_id = bod.id inv.cant = 0 inv_id = dbapi.create(inv) invs[bod.id] = inv # create prices for alm_id, p in prices.items(): price = PriceList() price.nombre = p['display_name'] price.precio1 = int(float(p['price1']) * 100) price.precio2 = int(float(p['price2']) * 100) price.cant_mayorista = p['cant'] price.prod_id = i.prod_id price.unidad = i.unit price.almacen_id = int(alm_id) bodid = allstores[price.almacen_id].bodega_id price.upi = conts[bodid] price.multiplicador = i.multiplier dbapi.create(price)