Пример #1
0
 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)
Пример #2
0
 def initial_acceptance_from_custom(cls, acceptance):
     debug(u"Инициализация по новой `прихода` id = '%s' начата."
           % acceptance.id)
     from services.mailinvoice import InvoiceService
     invoice = InvoiceService.create_invoice(
         number=InvoiceService.generate_number(acceptance.date),
         date=acceptance.date, provider=acceptance.provider
     )
     acceptance.invoices.append(invoice)
     debug(u"Инициализация по новой `прихода` id = '%s' завершена."
           % acceptance.id)
Пример #3
0
 def get(self, id):
     from services.mailinvoice import InvoiceService
     try:
         invoice = InvoiceService.get_by_id(id)
         return _stub(invoice)
     except Exception as exc:
         error(unicode(exc))
         raise
Пример #4
0
    def handle(self, provider, mail):
        from services.mailinvoice import InvoiceService
        from db import db
        invmodel = InvoiceService.create_invoice(
            number=self.number, date=self.date, provider=provider,
            sum_without_NDS=self.sum_without_NDS, sum_with_NDS=self.sum_with_NDS,
            sum_NDS=self.sum_NDS, weight=self.weight, responsible=self.responsible)
        products = self.get_products()

        mail.invoice = invmodel

        db.session.add(mail)

        for product in products:
            InvoiceService.handle_invoiceitem(
                full_name=product.full_name, name=product.name, number_local=product.number_local,
                number_global=product.number_global,
                count_order=product.count_order, count_postorder=product.count_postorder,
                count=product.count, price_without_NDS=product.price_without_NDS,
                price_with_NDS=product.price_with_NDS, sum_without_NDS=product.sum_without_NDS,
                sum_NDS=product.sum_NDS, rate_NDS=product.rate_NDS, sum_with_NDS=product.sum_with_NDS,
                thematic=product.thematic, count_whole_pack=product.count_whole_pack,
                placer=product.placer, invoice=invmodel)
Пример #5
0
    def post(self):
        data = request.json['data']

        prices = data['items']
        invoice_id = data['invoice_id']
        invoice = InvoiceService.get_by_id(invoice_id)
        try:
            PriceService.create_or_update_prices(invoice, prices)
            db.session.commit()
        except PriceServiceException as err:
            debug(unicode(err))
            abort(404, message=unicode(err))
        except Exception as exc:
            error(unicode(exc))
            raise
        return "ok"
Пример #6
0
    def check_count(cls, invoice_id, good_id, count, waybill_id):
        waybill = cls.get_by_id(waybill_id)
        from services.mailinvoice import InvoiceService

        if waybill.from_type() == FROM_MAIL:
            count_item = InvoiceService.get_count_item(invoice_id, good_id)
            WayBillItems.query.filter(
                WayBillItems.good_id == good_id
            )
            res = db.session.query(
                func.sum(WayBillItems.count).label('sum')).join(WayBill).filter(
                WayBill.invoice_id == invoice_id,
                WayBillItems.good_id == good_id)
            res = res.filter(WayBill.id != waybill_id)
            uses_cnt = res.first().sum or 0
            return (uses_cnt + count) <= count_item
        return True
Пример #7
0
    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)
Пример #8
0
    def prepared_acceptance(cls, acceptance, date, pointsale_id, type,
                            provider_id, invoices):
        from services.mailinvoice import InvoiceService
        from services.helperserv import HelperService
        from services.modelhelper import ModelService
        if acceptance.id is None or acceptance.status == DRAFT:
            if date is None:
                raise AcceptanceException(
                    u"Поле дата - обязательно для заполнения.")
            acceptance.date = HelperService.convert_to_pydate(date)
            if not ModelService.check_id(
                    pointsale_id):
                raise AcceptanceException(
                    u"Поле торговая точка - обязательно для заполнения.")
            if type is None:
                raise AcceptanceException(
                    u"Нельзя создать приход без типа.")
            type = int(type)
            if type not in [MAIL, NEW]:
                raise AcceptanceException(
                    u"Передан неверный тип.")
            if type == MAIL and not invoices:
                raise AcceptanceException(
                    u"При выбранном типе 'Регулярная накладная' необходимо "
                    u"указать как минимум одну накладную.")
            if type == NEW and not ModelService.check_id(provider_id):
                raise AcceptanceException(
                    u"При выбранном типе 'Новая' необходимо указать "
                    u"поставщика.")
            if type == MAIL:
                acceptance.provider_id = None

                acceptance.invoices[:] = []

                for invoice_id in invoices:
                    invoice = InvoiceService.get_by_id(invoice_id)
                    acceptance.invoices.append(invoice)

        return acceptance
Пример #9
0
 def get(self, invoice_id):
     from services.mailinvoice import InvoiceService
     count = InvoiceService.get_count_items(invoice_id)
     return {'result': {'count': count}}
Пример #10
0
 def get(self, invoice_id):
     from services.mailinvoice import InvoiceService
     return {'items': InvoiceService.get_items(invoice_id)}
Пример #11
0
    def get(self, id):

        return {"items": InvoiceService.get_items_acceptance(id, remain=False)}
Пример #12
0
 def get(self, id):
     return {"items": InvoiceService.get_items_acceptance(id)}