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
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
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
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
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