def handle_orderitem(cls, full_name, name, number_local, number_global, date, remission, NDS, price_prev, price_post, order): from applications.good.service import GoodService from applications.commodity.service import CommodityService item = OrderItem() item.full_name = full_name, item.name = name item.number_local = number_local item.number_global = number_global item.date = date item.remission = remission item.NDS = float(NDS.replace("%", "").strip()) item.price_prev = price_prev if price_prev else 0.0 item.price_post = price_post if price_post else 0.0 item.order = order res, comm = CommodityService.get_or_create_commodity( name=name) if res is False: if not number_local and not number_global: comm.numeric = False db.session.add(comm) db.session.flush() res, good = GoodService.get_or_create_commodity_numbers( comm.id, number_local, number_global) good.commodity = comm good.full_name = full_name item.good = good db.session.add(good) db.session.add(item)
def handle_returnitem(cls, full_name, name, number_local, number_global, date, date_to, price_without_NDS, price_with_NDS, remission, count_delivery, count_rem, return_inst): from applications.commodity.service import CommodityService from applications.good.service import GoodService item = ReturnItem() item.full_name = full_name item.name = name item.number_local = number_local item.number_global = number_global item.date = date item.date_to = date_to item.price_without_NDS = price_without_NDS item.price_with_NDS = price_with_NDS item.remission = remission item.count_delivery = count_delivery item.count_rem = count_rem item.return_item = return_inst res, comm = CommodityService.get_or_create_commodity( name=name) if res is False: if not number_local and not number_global: comm.numeric = False db.session.add(comm) db.session.flush() try: res, good = GoodService.get_or_create_commodity_numbers( comm.id, number_local, number_global) except GoodArgumentExc as exc: error(u"При обработке позиций возврата возникла " u"ошибка. " + unicode(exc)) raise good.commodity = comm good.full_name = full_name item.good = good db.session.add(good) db.session.add(item)
def pre_save(self, obj, data): from applications.commodity.service import CommodityService obj.number_local = str(obj.number_local) if obj.number_local else None obj.number_global = str(obj.number_global) if obj.number_global \ else None if obj.commodity_id is None: raise GoodResourceCanon.GoodResourceException( u"Нельзя сохранить товар без номенклатуры.") commodity = CommodityService.get_by_id(obj.commodity_id) try: res, good = GoodService.get_or_create_commodity_numbers( obj.commodity_id, obj.number_local, obj.number_global, obj.id) except GoodServiceException as exc: raise GoodResourceCanon.GoodResourceException(unicode(exc)) if res is False: good.commodity = commodity price_id = data.get('price_id') if price_id: good.price_id = price_id if not data.get('full_name'): full_name = GoodService.full_name(good) else: full_name = obj.full_name good.full_name = full_name if res is True: if commodity.numeric: message = u"В системе уже есть товар с наименованием %s и " \ u"№%s(%s)" % ( commodity.name, obj.number_local, obj.number_global) else: message = u"В системе уже есть безномерной товар с " \ u"наименованием %s" % commodity.name raise GoodResourceCanon.GoodResourceException(message) good = super(GoodResourceCanon, self).pre_save(good, data) return good
def handle_invoiceitem( cls, 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=None, fact_count=None, price_retail=None, price_gross=None): """ Обработка позиции накладной. Сохраняем в БД позицию. Создаем товар в системе. """ from applications.commodity.service import CommodityService invitem = InvoiceItem() invitem.full_name = full_name invitem.count_order = count_order invitem.count_postorder = count_postorder invitem.count = count invitem.price_without_NDS = price_without_NDS invitem.price_with_NDS = price_with_NDS invitem.sum_without_NDS = sum_without_NDS invitem.sum_with_NDS = sum_with_NDS invitem.sum_NDS = sum_NDS invitem.rate_NDS = rate_NDS invitem.count_whole_pack = count_whole_pack invitem.placer = placer invitem.invoice = invoice invitem.price_gross = price_gross invitem.price_retail = price_retail if good: invitem.good = good invitem.name = good.commodity.name invitem.number_local = good.number_local invitem.number_global = good.number_global invitem.thematic=good.commodity.thematic if fact_count: invitem.fact_count = fact_count else: invitem.name=name invitem.number_local=number_local invitem.number_global=number_global invitem.thematic=thematic res, comm = CommodityService.get_or_create_commodity( name=name, thematic=thematic) if res is False: if not number_local and not number_global: comm.numeric = False db.session.add(comm) db.session.flush() try: res, good = GoodService.get_or_create_commodity_numbers( comm.id, number_local, number_global) except GoodArgumentExc as exc: error(u"При обработке позиций накладной возникла ошибка. " + unicode(exc)) raise good.commodity = comm good.full_name = full_name invitem.good = good db.session.add(good) db.session.add(invitem)