def get_count_remain(remain, item, pointsale_id): if remain: return PointSaleService.item_to_pointsale_good( pointsale.id, item.good_id).count \ if PointSaleService.item_to_pointsale_good( pointsale.id, item.good_id) else "" else: return item.count
def get_item_to_acceptance(cls, invoice_id, acceptance_id): from applications.point_sale.service import PointSaleService from applications.acceptance.service import AcceptanceService acceptance = AcceptanceService.get_by_id(acceptance_id) pointsale = acceptance.pointsale return [{ "id": item.id, "full_name": item.full_name, "good_id": item.good_id, "price_retail": GoodService.get_price( item.good_id).price_retail if GoodService.get_price( item.good_id) else "", "price_gross": GoodService.get_price( item.good_id).price_gross if GoodService.get_price( item.good_id) else "", "count": PointSaleService.item_to_pointsale_good( pointsale.id, item.good_id).count if PointSaleService.item_to_pointsale_good( pointsale.id, item.good_id) else "", } for item in cls.get_items(invoice_id=invoice_id)]
def status(cls, waybillreturn, status): from applications.point_sale.service import PointSaleService from applications.return_app.service import ReturnService debug(u"Смена статуса `накладной возврата` %s с %s на %s." % ( waybillreturn.id, waybillreturn.status, StatusType[status])) if status == DRAFT: waybillreturn.items.delete() if status == IN_PROG: waybillreturn.items.delete() return_inst = ReturnService.get_by_id(waybillreturn.returninst_id) point = waybillreturn.pointsale for item in return_inst.items: good_id = item.good_id res = PointSaleService.item_to_pointsale_good( point.id, good_id) if res: itemreturn = WayBillReturnItems() itemreturn.waybill = waybillreturn itemreturn.good_id = good_id itemreturn.count_plan = res.count db.session.add(itemreturn) if status == FINISH: from_point = waybillreturn.pointsale to_point = PointSaleService.get_central() for item in waybillreturn.items: PointSaleService.sync_good_increment( from_point.id, item.good_id, item.count * -1 if item.count else 0) PointSaleService.sync_good_increment( to_point.id, item.good_id, item.count if item.count else 0) waybillreturn.status = status debug(u"Смена статуса `накладной возврата` %s с %s на %s завершено." % ( waybillreturn.id, waybillreturn.status, StatusType[status]))
def save_from_json(cls, date, items, provider_id=None, invoice=None): """ Сохраняем накладную с позициями. Для редактирования надо передать инстанс накладной в переменную invoice. """ from applications.price.service import DataToUpdatePrice, PriceService from applications.point_sale.service import PointSaleService try: if invoice: invmodel = invoice else: provider = ProviderService.get_by_id(provider_id) invmodel = InvoiceService.create_invoice( number=InvoiceService.generate_number(date), date=date, provider=provider, sum_without_NDS=None, sum_with_NDS=None, sum_NDS=None, weight=None, responsible=None) db.session.add(invmodel) if invoice: pointsale = invoice.acceptance.pointsale for item in invmodel.items: pointsale_item = PointSaleService.item_to_pointsale_good( pointsale.id, item.good_id) pointsale_item.count -= item.count db.session.add(pointsale_item) invmodel.items.delete() db.session.add(invmodel) for item in items: good = GoodService.get_good(item['good_id']) name = good.commodity.name number_local = good.number_local number_global = good.number_global full_name = GoodService.generate_name( name, number_local, number_global) invoice = invmodel count_order= None count_postorder = None count = item['count_invoice'] if 'count_invoice' in item \ else None price_without_NDS = item['price_pre'] if 'price_pre' in item \ else None price_with_NDS = item['price_post'] if 'price_post' in item \ else None sum_without_NDS = None sum_NDS = None rate_NDS = item['NDS'] if 'NDS' in item else None sum_with_NDS = None thematic = None count_whole_pack = None placer = None fact_count = None cls.handle_invoiceitem( full_name, name, number_local, number_global, invoice, count_order, count_postorder, count, price_without_NDS, price_with_NDS, sum_without_NDS, sum_NDS, rate_NDS, sum_with_NDS, thematic, count_whole_pack, placer, good, fact_count) if 'price_retail' in item or 'price_gross' in item: PriceService.create_or_update(good, DataToUpdatePrice( id_commodity=good.commodity_id, price_retail=item['price_retail'], price_gross=item['price_gross'], price_prev=item['price_prev'] if 'price_prev' in item else None, price_post=item['price_post'], NDS=item['NDS'] if 'NDS' in item else None, number_local=number_local, number_global=number_global, invoice=invmodel)) except Exception as exc: db.session.rollback() error(unicode(exc)) raise InvoiceService.InvoiceServiceException(unicode(exc)) else: db.session.commit() return invmodel