Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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)