コード例 #1
0
ファイル: service.py プロジェクト: StasEvseev/adminbuy
    def get_price_priceparish(cls, commodity_id, price_post, number_local=None,
                              number_global=None, date=None):
        """
        Ищем цену и цену прихода по номенклатуре, цене с НДС, номерам и дате.

        Генерирует NotFindPriceExc, PriceArgumentExc, NotFindPriceParishExc.
        """
        from applications.commodity.service import CommodityService
        try:
            priceparish = cls.get_priceparish(
                commodity_id, number_local, number_global, date)
        except NotFindPriceParishExc as exc:
            """
            Если сработало исключение, то и цены значит нет на данный товар.
            Поэтому генерируем соответствующее исключение.
            """
            raise NotFindPriceExc(unicode(exc))
        commodity = CommodityService.get_by_id(commodity_id)
        try:
            try:
                priceparish = priceparish.filter(
                    PriceParish.price_post == price_post)
                priceparish = priceparish.one()
            except MultipleResultsFound:
                priceparish = priceparish[0]
        except NoResultFound:
            raise NotFindPriceParishExc(
                u"Не найдено цены прихода для товара %s и ценой %s" % (
                    commodity.name, price_post))
        return priceparish.price, priceparish
コード例 #2
0
ファイル: service.py プロジェクト: StasEvseev/adminbuy
    def get_priceparish(cls, commodity_id, number_local=None,
                        number_global=None, date=None):
        """
        Получаем цену по номенклатуре, номерам и дате.
        """
        from applications.commodity.service import CommodityService
        commodity = CommodityService.get_by_id(commodity_id)
        if commodity.numeric:
            # ОБРАБОТКА НОМЕРНОЙ НОМЕНКЛАТУРЫ
            if not number_local and not number_global:
                raise PriceArgumentExc(
                    u"Для номерной номенклатуры нужно указать общий год и "
                    u"номер в пределах года")

            priceparish = PriceParish.query.filter(
                PriceParish.commodity_id == commodity_id,
                PriceParish.number_local_from <= number_local,
                PriceParish.number_global_from <= number_global
            ).order_by(desc(PriceParish.number_local_from),
                       desc(PriceParish.number_global_from))
            count = priceparish.count()

            if count == 0:
                raise NotFindPriceParishExc(
                    u"Не найдено цен для номенклатуры %s и номеров %s и %s" % (
                    commodity.name, number_local, number_global))

            return priceparish
        else:
            # ОБРАБОТКА БЕЗНОМЕРНОЙ НОМЕНКЛАТУРЫ
            if number_local or number_global:
                raise PriceArgumentExc(
                    u"Для безномерной номенклатуры номера должны быть пустыми.")
            priceparish = PriceParish.query.filter(
                PriceParish.commodity_id == commodity_id
            ).order_by(desc(PriceParish.date_from))
            if date:
                priceparish = priceparish.filter(PriceParish.date_from <= date)
            count = priceparish.count()
            if count == 0:
                raise NotFindPriceParishExc(
                    u"Не найдено цен для номенклатуры %s" % commodity.name)
            else:
                return priceparish
コード例 #3
0
ファイル: resource.py プロジェクト: StasEvseev/adminbuy
    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
コード例 #4
0
ファイル: service.py プロジェクト: StasEvseev/adminbuy
    def get_or_create_commodity_numbers(
            cls, commodity_id, number_local=None, number_global=None, id=None):
        from applications.commodity.service import CommodityService
        commodity = CommodityService.get_by_id(commodity_id)

        if commodity.numeric:
            if not number_local and not number_global:
                raise GoodArgumentExc(
                    u"Для номерного товара '%s' не указаны номера" %
                    unicode(commodity.name))

        if commodity.numeric is False:
            if number_local or number_global:
                raise GoodArgumentExc(
                    u"Для безномерного товара '%s' нельзя указывать номера" %
                    unicode(commodity.name))

        try:
            if id:
                good = Good.query.filter(
                    Good.commodity_id == commodity_id,
                    Good.number_local == number_local,
                    Good.number_global == number_global,
                    not_(Good.id == id)).one()
            else:
                good = Good.query.filter(
                    Good.commodity_id == commodity_id,
                    Good.number_local == number_local,
                    Good.number_global == number_global).one()
        except NoResultFound:
            if id:
                return False, Good.query.get(id)
            else:
                return False, Good(commodity_id=commodity_id,
                                   number_local=number_local,
                                   number_global=number_global)
        else:
            return True, good