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)