def get(self, id): try: good = GoodService.get_good(id) except GoodServiceException as err: abort(404, message=unicode(err)) return good
def update_fact_count_custom(cls, acceptance, items): debug(u"Обновление фактического кол-ва по новой `прихода` id = '%s' " u"начато." % acceptance.id) from services.mailinvoice import InvoiceService from applications.good.service import GoodService invoice = acceptance.invoices[0] acceptance.items.delete() invoice.items.delete() for item in items: good_id = item[GOOD_OBJ_ATTR][GOOD_ID_ATTR] fact_count = item[COUNT_ATTR] price_post = item[PRICE_POST_ATTR] price_retail = item[PRICE_RETAIL_ATTR] price_gross = item[PRICE_GROSS_ATTR] good = GoodService.get_good(good_id) InvoiceService.handle_invoiceitem( invoice=invoice, good=good, fact_count=fact_count, price_with_NDS=price_post, full_name=None, name=None, number_local=None, number_global=None, count_order=None, count_postorder=None, count=fact_count, price_without_NDS=None, sum_NDS=None, sum_with_NDS=None, thematic=None, count_whole_pack=None, placer=None, rate_NDS=None, sum_without_NDS=None, price_retail=price_retail, price_gross=price_gross) ac_it = AcceptanceItems() ac_it.good_id = good_id ac_it.acceptance = acceptance ac_it.count = fact_count ac_it.fact_count = fact_count db.session.add(ac_it) debug(u"Обновление фактического кол-ва по новой `прихода` id = '%s' " u"завершено." % acceptance.id)
def get(self): args = request.args good_id = args['good_id'] price_post = args['price_post'] good = GoodService.get_good(good_id) commodity = good.commodity try: prices = PriceService.prices_parish_to_commodity_price( commodity, float(price_post)) # TODO - кажется тут не вылетит никогда исключение # PriceServiceException except PriceServiceException as exc: debug(unicode(exc)) error(u"Это случилось. resource/price.py") abort(404, message=unicode(exc), code=1) else: return {'items': [{ 'invoice_id': x.invoice_id, 'invoice_str': unicode(x.invoice), 'provider_id': x.invoice.provider_id, 'provider_str': x.invoice.provider.name, 'number_local_from': x.number_local_from, 'number_global_from': x.number_global_from, 'date_from': x.date_from, 'price_post': x.price_post, 'price_retail': x.price.price_retail, 'price_gross': x.price.price_gross } for x in prices]}
def sync_from_json(cls, obj, json): """ Сохранение позиций инвентаризации. """ from applications.good.service import GoodService if obj.status not in [VALIDATED, DRAFT]: debug(u"Удаление связанных записей в инвентаризации (%s)" % obj.id) obj.items.delete() debug(u"Старт: Заполнение новых записей в инвентаризацию (%s)" % obj.id) for item in json: if COUNT_AFTER_ATTR not in item: good = GoodService.get_good(item[GOOD_ATTR][GOOD_ID_ATTR]) raise InventoryService.InventoryServiceException( u"Товар %s без количества после инвентаризации, не " u"может быть сохранен в (%s)." % ( good.full_name, obj)) in_item = cls.create_item( obj.id, item[GOOD_ATTR][GOOD_ID_ATTR], item[COUNT_BEFORE_ATTR] if COUNT_BEFORE_ATTR in item and item[COUNT_BEFORE_ATTR] else 0, item[COUNT_AFTER_ATTR]) db.session.add(in_item) debug(u"Конец: Заполнение новых записей в инвентаризацию (%s)" % obj.id) else: debug(u"В статусе %s и %s позиции в инвентаризацию (%s) не " u"сохраняются." % (VALIDATED, DRAFT, obj.id))
def upgrade_items(cls, waybill, items, path_target=None, path=None): from applications.price.service import PriceService from applications.good.service import GoodService waybill.items.delete() db.session.add(waybill) for it in items: good = GoodService.get_good(it.good_id) if waybill.type == RETAIL: if not good.price_id or not PriceService.get_price( good.price_id).price_retail: raise WayBillServiceException( u"Товар без розничной цены. %s" % good.full_name) else: if not good.price_id or not PriceService.get_price( good.price_id).price_gross: raise WayBillServiceException( u"Товар без оптовой цены. %s" % good.full_name) if it.count and not WayBillService.check_count( invoice_id=waybill.invoice_id, waybill_id=waybill.id, good_id=it.good_id, count=int(it.count)): raise WayBillServiceException( u"Недостаточно товара %s" % good.full_name) retail_item = WayBillItems( good_id=good.id, waybill=waybill, count=it.count if it.count else None) db.session.add(retail_item)
def get(self, id): good = GoodService.get_good(id) commodity = good.commodity try: items = PriceService.get_priceparish_strong( commodity_id=commodity.id, number_global=good.number_global, number_local=good.number_local) except NotFindPriceParishExc: items = [] return {'items': items}
def get(self, id): good = GoodService.get_good(id) file_name = str(uuid.uuid4()) + ".pdf" path_to_target = os.path.join(PATH_TO_GENERATE_INVOICE, file_name) path = os.path.join(PATH_WEB, file_name) if good.barcode is None or good.barcode == '': abort(400, message=u"Для печати штрих кода, необходимо указать " u"его!") createBarCodes(path_to_target, str(good.barcode)) return {"link": path}
def create_or_update_prices(cls, invoice_model, data_items): """ Создаем или изменяем цены позиций переданной накладной. """ invoice_id = invoice_model.id debug(u"Начало сохранения цен в позициях накладной %d", invoice_id) from applications.good.service import GoodService from services.mailinvoice import InvoiceService try: for data in data_items: good_id = data['id_good'] commodity_id = int(data['id_commodity']) price_retail = float(data['price_retail']) \ if data['price_retail'] else None price_gross = float(data['price_gross']) \ if data['price_gross'] else None NDS = float(data['NDS']) price_prev = float(data['price_prev']) price_post = float(data['price_post']) good = GoodService.get_good(good_id) number_local = data['number_local'] number_global = data['number_global'] item = InvoiceService.get_item_by_invoice_good(invoice_id, good_id) item.price_retail = price_retail item.price_gross = price_gross db.session.add(item) cls.create_or_update(good, DataToUpdatePrice( id_commodity=commodity_id, price_retail=price_retail, price_gross=price_gross, price_prev=price_prev, price_post=price_post, NDS=NDS, number_local=number_local, number_global=number_global, invoice=invoice_model)) except Exception as err: error( u"Ошибка сохранения цен в позициях накладной %d. %s", invoice_id, unicode(err)) db.session.rollback() raise PriceServiceException(err) else: db.session.commit() debug(u"Конец сохранения цен в позициях накладной %d", invoice_id)
def upgrade_items(cls, waybillreturn, items): from applications.price.service import PriceService from applications.good.service import GoodService waybillreturn.items.delete() db.session.add(waybillreturn) for it in items: good = GoodService.get_good(it.good_id) if waybillreturn.type == RETAIL: if not good.price_id or not PriceService.get_price( good.price_id).price_retail: raise WayBillReturnService.WayBillReturnServiceExc( u"Товар без розничной цены. %s" % good.full_name) else: if not good.price_id or not PriceService.get_price( good.price_id).price_gross: raise WayBillReturnService.WayBillReturnServiceExc( u"Товар без оптовой цены. %s" % good.full_name) it.waybill = waybillreturn db.session.add(it)
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