Example #1
0
 def get_by_attr(cls, invoice_id, receiver_id, pointsale_id, type):
     """
     Извлекаем накладную из БД по приходной, получателю и типу.
     """
     if not receiver_id or not pointsale_id:
         raise WayBillServiceException(u"No receiver or point sale")
     if invoice_id:
         if ModelService.check_id(receiver_id):
             waybill = WayBill.query.filter(
                 WayBill.invoice_id == invoice_id,
                 WayBill.receiver_id == receiver_id,
                 WayBill.type == type).one()
         else:
             waybill = WayBill.query.filter(
                 WayBill.invoice_id == invoice_id,
                 WayBill.pointsale_id == pointsale_id,
                 WayBill.type == type).one()
     else:
         if ModelService.check_id(receiver_id):
             waybill = WayBill.query.filter(
                 WayBill.receiver_id == receiver_id,
                 WayBill.type == type).one()
         else:
             waybill = WayBill.query.filter(
                 WayBill.pointsale_id == pointsale_id,
                 WayBill.type == type).one()
     return waybill
Example #2
0
    def count_exists(cls, invoice_id, receiver_id, pointsale_id, type):
        """
        Возвращаем количество накладных по приходной накладной, получателю и
        типу.
        """

        if not receiver_id or not pointsale_id:
            raise WayBillServiceException(u"No receiver or point sale")

        if invoice_id:
            if ModelService.check_id(receiver_id):
                count = WayBill.query.filter(
                    WayBill.invoice_id == invoice_id,
                    WayBill.receiver_id == receiver_id,
                    WayBill.type == type).count()
            else:
                count = WayBill.query.filter(
                    WayBill.invoice_id == invoice_id,
                    WayBill.pointsale_id == pointsale_id,
                    WayBill.type == type).count()
            return count
        else:
            if ModelService.check_id(receiver_id):
                count = WayBill.query.filter(
                    WayBill.receiver_id == receiver_id,
                    WayBill.type == type).count()
            else:
                count = WayBill.query.filter(
                    WayBill.pointsale_id == pointsale_id,
                    WayBill.type == type).count()
            return count
Example #3
0
    def create(cls, pointsale_id, receiver_id, date, date_to, type, typeRec,
               return_id):
        """
        Создаем или получаем итоговую накладную.
        Сначала проверяем, есть ли уже накладная по параметрам уникальности(
        приходная накладная, получатели
        (точки или получатель) и тип).
        Если накладной нет, то создаем.
        Если накладная уже есть, генерим исключение. Но если нам передали флаг
        forse, то извлекаем из БД и возвращаем.
        """
        if not ModelService.check_id(receiver_id) and not ModelService.check_id(
                pointsale_id):
            raise WayBillReturnService.WayBillReturnServiceExc(
                u"No receiver or point sale")

        type = int(type)
        typeRec = int(typeRec)

        if type not in TYPE.keys():
            raise WayBillReturnService.WayBillReturnServiceExc(
                u"Тип накладной указан неверно - %s." % type)
        if typeRec not in RecType.keys():
            raise WayBillReturnService.WayBillReturnServiceExc(
                u"Тип получателя указан неверно - %s." % typeRec)

        waybillreturn = WayBillReturn()
        waybillreturn.returninst_id = return_id
        waybillreturn.date = date
        waybillreturn.date_to = date_to
        if typeRec == POINTSALE:
            if not ModelService.check_id(pointsale_id):
                raise WayBillReturnService.WayBillReturnServiceExc(
                    u"Ошибка. Нельзя выбрать тип 'Торговая точка' и "
                    u"'Оптовика'.")
            waybillreturn.pointsale_id = pointsale_id
        elif typeRec == RECEIVER:
            if not ModelService.check_id(receiver_id):
                raise WayBillReturnService.WayBillReturnServiceExc(
                    u"Ошибка. Нельзя выбрать тип 'Оптовика' и 'Торговую "
                    u"точку'.")
            waybillreturn.receiver_id = receiver_id

        waybillreturn.type = type
        waybillreturn.number = cls.generate_number(date, type)
        waybillreturn.typeRec = typeRec
        db.session.add(waybillreturn)
        return waybillreturn
Example #4
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
Example #5
0
    def create(cls, pointsale_from_id, invoice_id, date, receiver_id,
               pointsale_id, type, typeRec, forse=False):
        """
        Создаем или получаем итоговую накладную.
        Сначала проверяем, есть ли уже накладная по параметрам уникальности(
        приходная накладная, получатели
        (точки или получатель) и тип).
        Если накладной нет, то создаем.
        Если накладная уже есть, генерим исключение. Но если нам передали флаг
        forse, то извлекаем из БД и возвращаем.
        """
        if not ModelService.check_id(pointsale_from_id):
            raise WayBillServiceException(u"Не выбрана точка отправки.")
        if not ModelService.check_id(receiver_id) and not ModelService.check_id(
                pointsale_id):
            raise WayBillServiceException(u"No receiver or point sale")

        if pointsale_from_id and ModelService.check_id(pointsale_id) \
                and pointsale_id == pointsale_from_id:
            raise WayBillServiceException(
                u"Нельзя делать накладную прихода циклической.")

        type = int(type)
        typeRec = int(typeRec)
        if type not in TYPE.keys():
            raise WayBillServiceException(
                u"Тип накладной указан неверно - %s." % type)
        if typeRec not in RecType.keys():
            raise WayBillServiceException(
                u"Тип получателя указан неверно - %s." % typeRec)

        waybill = WayBill()
        waybill.invoice_id = invoice_id
        waybill.pointsale_from_id = pointsale_from_id
        waybill.date = date
        if typeRec == POINTSALE:
            if not ModelService.check_id(pointsale_id):
                raise WayBillServiceException(
                    u"Ошибка. Нельзя выбрать тип 'Торговая точка' и "
                    u"'Оптовика'.")
            waybill.pointsale_id = pointsale_id
            waybill.receiver_id = None
        elif typeRec == RECEIVER:
            if not ModelService.check_id(receiver_id):
                raise WayBillServiceException(
                    u"Ошибка. Нельзя выбрать тип 'Оптовика' и 'Торговую "
                    u"точку'.")
            waybill.receiver_id = receiver_id
            waybill.pointsale_id = None

        waybill.type = type
        waybill.number = cls.generate_number(date, type)
        waybill.typeRec = typeRec
        db.session.add(waybill)
        return waybill