Esempio n. 1
0
 def test03(self):
     luc = Contact.objects.get(id=2)
     i1 = Invoice(number=2000, customer=luc, creation_date="2009-04-14")
     i1.save()
     i2 = Invoice(customer=luc, creation_date="2009-04-14")
     i2.save()
     self.assertEquals(i2.number, 2001)
    def setUpClass(cls):

        cls.policy = Policy('Test Policy', date(2015, 1, 1), 1200)
        db.session.add(cls.policy)
        db.session.commit()

        cls.invoice_1 = Invoice(cls.policy.id, date(2015, 1, 1), date(2015, 1, 15), date(2015, 2, 1), 50)
        cls.invoice_2 = Invoice(cls.policy.id, date(2015, 3, 1), date(2015, 3, 1), date(2015, 2, 1), 20)
        db.session.add(cls.invoice_1)
        db.session.add(cls.invoice_2)
        db.session.commit()
Esempio n. 3
0
    def make_invoices(self):
        """
        Creates invoices depending on policy's billing_schedule.
        """

        billing_schedules = {
            "Annual": 1,
            "Two-Pay": 2,
            "Quarterly": 4,
            "Monthly": 12
        }
        months_after_eff_date_dict = {
            "Annual": 12,
            "Two-Pay": 6,
            "Quarterly": 3,
            "Monthly": 1,
        }

        invoices = []
        first_invoice = Invoice(
            self.policy.id,
            self.policy.effective_date,  # bill_date
            self.policy.effective_date + relativedelta(months=1),  # due
            self.policy.effective_date +
            relativedelta(months=1, days=14),  # cancel
            self.policy.annual_premium,
        )
        invoices.append(first_invoice)

        if self.policy.billing_schedule in billing_schedules:
            invoices_quantity = billing_schedules.get(
                self.policy.billing_schedule)
            first_invoice.amount_due = first_invoice.amount_due / invoices_quantity
            months_between_invoices = months_after_eff_date_dict.get(
                self.policy.billing_schedule)
            for i in range(1, invoices_quantity):
                a = i * months_between_invoices
                bill_date = self.policy.effective_date + relativedelta(
                    months=a)
                invoice = Invoice(
                    self.policy.id,
                    bill_date,
                    bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=1, days=14),
                    self.policy.annual_premium /
                    billing_schedules.get(self.policy.billing_schedule),
                )
                invoices.append(invoice)
        else:
            print "You have chosen a bad billing schedule."

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
Esempio n. 4
0
def generate_monthly_invoices(policy_id):
    # query the database to get the policy with the id
    policy = Policy.query.filter_by(id=policy_id).one()

    # check if the policy has an initial invoice generated by PolicyAccounting
    if policy.invoices:

        # check if the policy is a Policy Three plan
        if policy.policy_number == "Policy Three":
            # delete any pre-generated invoice for the policy
            for invoice in policy.invoices:
                db.session.delete(invoice)

            # set the billing schedule to 12 i.e monthly
            billing_schedule = 12
            # create an empty list to store all invoices generated for the policy
            invoices = []
            # create an instance of invoice
            first_invoice = Invoice(
                policy.id,
                policy.effective_date,  # bill_date
                policy.effective_date + relativedelta(months=1),  # due
                policy.effective_date +
                relativedelta(months=1, days=14),  # cancel
                policy.annual_premium)

            invoices.append(first_invoice)

            first_invoice.amount_due = first_invoice.amount_due / billing_schedule
            for i in range(1, billing_schedule):
                months_after_eff_date = i * 1
                bill_date = policy.effective_date + relativedelta(
                    months=months_after_eff_date)
                # create an instance of invoice
                invoice = Invoice(policy.id, bill_date,
                                  bill_date + relativedelta(months=1),
                                  bill_date + relativedelta(months=1, days=14),
                                  policy.annual_premium / billing_schedule)
                # add the generated invoice to invoice list
                invoices.append(invoice)

            # save all the generated invoices to the database
            for invoice in invoices:
                db.session.add(invoice)
            db.session.commit()
            print "Invoices generated for Policy Three (Monthly Schedule)"
        else:
            print(
                "This not a Policy Three. Get the appropriate representation of Policy Three"
            )
    else:
        print("Policy not found")
Esempio n. 5
0
    def make_invoices(self):
        billing_schedules = {
            'Annual': 1,
            'Two-Pay': 2,
            'Quarterly': 4,
            'Monthly': 12
        }

        invoices = []

        # Create an Invoice.
        first_invoice = Invoice(
            self.policy.id,
            self.policy.effective_date,  # bill_date
            self.policy.effective_date + relativedelta(months=1),  # due date
            self.policy.effective_date +
            relativedelta(months=1, days=14),  # cancellation date
            self.policy.annual_premium)

        # Add invoice to array.
        invoices.append(first_invoice)

        # Get number of payments from billing_schedules
        num_of_payments = billing_schedules.get(
            self.policy.billing_schedule) or None

        if not num_of_payments:
            print "You have chosen a bad billing schedule."

        # Calculate first invoice amount due by dividing total by number of payments
        first_invoice.amount_due = first_invoice.amount_due / num_of_payments

        for i in range(1, num_of_payments):
            # Calculate months after effective date
            months_after_eff_date = i * (12 / num_of_payments)

            # Add months to effective date to get bill date
            bill_date = self.policy.effective_date + relativedelta(
                months=months_after_eff_date)
            invoice = Invoice(
                self.policy.id, bill_date, bill_date + relativedelta(months=1),
                bill_date + relativedelta(months=1, days=14),
                self.policy.annual_premium /
                billing_schedules.get(self.policy.billing_schedule))
            invoices.append(invoice)

        # Add new invoices to db
        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
def invoices(id=None):
    if request.method == 'GET':
        if id is not None:
            invoice = Invoice.query.get(id)
            if invoice:
                return jsonify(invoice.serialize()), 200
            return jsonify({"msg": "This invoice not found!"}), 404
        else:
            invoices = Invoice.query.all()
            invoices = list(map(lambda invoice: invoice.serialize(), invoices))
            return jsonify(invoices), 200

    elif request.method == 'PUT':
        invoice = Invoice.query.get(id)
        invoice.email_paypal = request.json.get("email_paypal", "")
        invoice.payment = request.json.get("payment", "")
        invoice.date = request.json.get("date", "")
        invoice.validity = request.json.get("validity", "")
        invoice.update()
        return jsonify('Actualizado correctamente'), 200

    elif request.method == 'DELETE':
        invoice = Invoice.query.get(id)
        invoice.delete()
        return jsonify('Borrado'), 200

    elif request.method == "POST":
        invoice = Invoice()
        invoice.email_paypal = request.json.get("email_paypal", "")
        invoice.payment = request.json.get("payment", "")
        invoice.date = request.json.get("date", "")
        invoice.validity = request.json.get("validity", "")
        invoice.premium = request.json.get("premium", "")
        invoice.save()
        return jsonify(invoice.serialize()), 201
def handle_request_invoice(user_id, params):
    plan = params.get('plan', None)
    plan_from_db = db_session_users.query(Plan).filter_by(
        stripe_id=plan).first()
    if not plan_from_db:
        return 'Invalid plan'
    plan_name = plan_from_db.name
    plan_id = plan_from_db.id
    current_user = db_session_users.query(User).filter_by(id=user_id).first()
    message = current_user.first_name + ' ' + current_user.last_name + ' is requesting to pay by invoice for the ' + plan_name + ' subscription. ' + current_user.first_name + ', the team at Compliance.ai will respond to your request soon!'
    try:
        email_helper.send_email(
            '*****@*****.**',
            current_user.email,
            'Invoice request from ' + current_user.first_name,
            template='feedback-inline',
            vars={
                'feedback': message,
                'User_first_name': current_user.first_name,
                'User_last_name': current_user.last_name,
            },
        )
    except SMTPException as e:
        return error_response('Could not send invoice email.', code=500)

    invoice_for_db = {
        'user_id': user_id,
        'plan_id': plan_id,
        'status': 'requested'
    }
    invoice_for_db = Invoice(invoice_for_db)
    db_session_users.add(invoice_for_db)
    db_session_users.commit()
    db_session_users.refresh(invoice_for_db)
    return {'invoice': 'invoice request sent'}
Esempio n. 8
0
    def make_invoices(self):
        """
        Create invoices for new Policy's instances
        """
        for invoice in self.policy.invoices:
            invoice.delete()

        invoices = []
        first_invoice = Invoice(
            self.policy.id,
            self.policy.effective_date,  #bill_date
            self.policy.effective_date + relativedelta(months=1),  #due
            self.policy.effective_date +
            relativedelta(months=1, days=14),  #cancel
            self.policy.annual_premium)
        invoices.append(first_invoice)

        if self.policy.billing_schedule == "Annual":
            invoices += self.create_invoice(first_invoice, 12)
        elif self.policy.billing_schedule == "Two-Pay":
            invoices += self.create_invoice(first_invoice, 6)
        elif self.policy.billing_schedule == "Quarterly":
            invoices += self.create_invoice(first_invoice, 3)
        elif self.policy.billing_schedule == "Monthly":
            invoices += self.create_invoice(first_invoice, 1)
        else:
            print "You have chosen a bad billing schedule."

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
Esempio n. 9
0
 def test04(self):
     luc = Contact.objects.get(id=2)
     table = Product.objects.get(id=1)
     chair = Product.objects.get(id=2)
     i = Invoice(customer=luc, creation_date="2009-04-14")
     i.save()
     i.docitem_set.create(pos=1, product=table, qty=1)
Esempio n. 10
0
def invoices(request):
    args = {}
    args['user'] = auth.get_user(request)

    if request.method == 'POST' and request.FILES['myfile']:
        myfile = request.FILES['myfile']
        fs = FileSystemStorage()
        filename = fs.save(myfile.name, myfile)
        uploaded_file_url = fs.url(filename)

        invoice = Invoice(Photo=uploaded_file_url,
                          DateTime=datetime.datetime.now(),
                          User=auth.get_user(request))
        invoice.save()

        args['uploaded_file_url'] = uploaded_file_url

    invoices_list = Invoice.objects.all()
    paginator = Paginator(invoices_list, 9)  # Show 25 contacts per page

    page = request.GET.get('page')
    try:
        invoices = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        invoices = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        invoices = paginator.page(paginator.num_pages)

    args['invoices'] = invoices

    return render(request, 'invoices.html', args)
Esempio n. 11
0
 def create_invoice(self, first_invoice, period):
     """
     :param first_invoice: Invoice instance
     :param billing_schedules: dict with the schedules available
     :param period: int with the number of periods (number of invoices)
     :return: list with Invoice instances
     """
     invoices = []
     first_invoice.amount_due = first_invoice.amount_due / self.billing_schedules.get(
         self.policy.billing_schedule)
     for i in range(
             1, self.billing_schedules.get(self.policy.billing_schedule)):
         months_after_eff_date = i * period
         bill_date = self.policy.effective_date + relativedelta(
             months=months_after_eff_date)
         amount = self.policy.annual_premium / self.billing_schedules.get(
             self.policy.billing_schedule)
         invoice = Invoice(
             self.policy.id,
             bill_date,
             bill_date + relativedelta(months=1),  #due date
             bill_date + relativedelta(months=1, days=14),  #cancel date
             amount)
         invoices.append(invoice)
     return invoices
Esempio n. 12
0
def invoice_create(utility, details, email, amount, utility_name):
    # init bank recipient params
    bank_account = details["bank_account"]
    reference = details["reference"] if "reference" in details else ""
    code = details["code"] if "code" in details else ""
    particulars = details["particulars"] if "particulars" in details else ""
    # request params
    recipient_params = dict(reference=reference,
                            code=code,
                            particulars=particulars)
    params = dict(market="ZAPNZD",
                  side="sell",
                  amount=str(amount),
                  amountasquotecurrency=True,
                  recipient=bank_account,
                  customrecipientparams=recipient_params)
    # create request
    r, err = bronze_request("BrokerCreate", params)
    if not r:
        return None, err
    # extract token and create invoice
    body = r.json()
    broker_token = body["token"]
    amount_cents_zap = int(decimal.Decimal(body["amountSend"]) * 100)
    amount_cents_nzd = int(decimal.Decimal(body["amountReceive"]) * 100)
    status = body["status"]
    invoice = Invoice(email, amount_cents_nzd, amount_cents_zap, broker_token,
                      status, utility_name)
    db.session.add(invoice)
    db.session.commit()
    return invoice, None
Esempio n. 13
0
    def make_invoices(self):
        for invoice in self.policy.invoices:
            invoice.deleted = True

        billing_schedules = {
            'Annual': None,
            'Two-Pay': 2,
            'Quarterly': 4,
            'Monthly': 12
        }

        invoices = []
        first_invoice = Invoice(
            self.policy.id,
            self.policy.effective_date,  # bill_date
            self.policy.effective_date + relativedelta(months=1),  # due
            self.policy.effective_date +
            relativedelta(months=1, days=14),  # cancel
            self.policy.annual_premium)
        invoices.append(first_invoice)

        schedule = self.policy.billing_schedule
        if schedule == "Annual":
            pass
        elif schedule in billing_schedules:
            num_payments = billing_schedules.get(schedule)
            # desire full-dollar bill amounts, but not always divisible, so add remainder to first installment
            first_invoice.amount_due = first_invoice.amount_due / num_payments + first_invoice.amount_due % num_payments

            for i in range(1, billing_schedules.get(schedule)):
                months_after_eff_date = i * 12 / num_payments
                bill_date = self.policy.effective_date + relativedelta(
                    months=months_after_eff_date)

                invoice = Invoice(
                    self.policy.id, bill_date,
                    bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=1, days=14),
                    self.policy.annual_premium /
                    billing_schedules.get(schedule))
                invoices.append(invoice)
        else:
            print "You have chosen a bad billing schedule."

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
Esempio n. 14
0
 def setUpClass(cls):
     print("Setting up")
     conn = mongoengine.connect(db=DB_NAME, host=DB_HOST)
     for n in range(1, 11):
         invoice = Invoice(x=n, invoice_number=2)
         position = Position(**POSITION).save()
         #invoice.positions = [InvoiceItem(position_id=str(position.id))]
         invoice.positions = [InvoiceItem(position=position)]
         invoice.save()
Esempio n. 15
0
 def no_payment(self, params):
   re = db.get(params['rekey'])
   invoices_count  = len(Invoice().all(keys_only=True).filter('realestate', re.key()).filter('state', Invoice._NOT_PAID).fetch(10))
   plural          = 's' if invoices_count>1 else ''
   
   context_ex = self.common_context()
   context_ex = dict({'invoices_count':invoices_count, 'plural':plural}, **context_ex)
   
   self.send_email('no_payment', re.email, u'Aviso de factura%s impaga%s' % (plural, plural), **context_ex)
Esempio n. 16
0
    def build(self):
        if self.__provider is None:
            raise Exception('Provider is required')
        if self.__items is None:
            raise Exception('No items')

        return Invoice(company=self.__provider,
                       issued_at=self.__issued_at,
                       items=self.__items,
                       remarks=self.__remarks)
Esempio n. 17
0
def process():
    form = ServiceForm()
    if form.validate_on_submit():
        currency = int(form.currency.data)
        if currency == 978:
            invoice = Invoice(form.description.data, form.amount.data,
                              currency, 'payeer_usd', 'invoice')
            invoice.save()
            data = invoice.get_invoice_form_params()
            return render_template('invoice.html', data=data, title='Invoice')

        if currency == 840:
            invoice = Invoice(form.description.data, form.amount.data,
                              currency, 'payeer_usd', 'tip')
            invoice.save()
            return render_template('tip.html',
                                   invoice=invoice,
                                   form_url=app.config['PS_TIP_URL'],
                                   shop_id=app.config['PS_SHOP_ID'],
                                   title='TIP')

    return redirect(url_for('index'))
Esempio n. 18
0
    def post(self):
        new_invoice = Invoice(client_name=request.json['client_name'])
        db.session.add(new_invoice)

        for item in request.json['invoice_items']:
            new_invoice_item = InvoiceItem(
                units = item['units'],
                description = item['description'],
                amount = item['amount'],
                invoice = new_invoice
            )
            db.session.add(new_invoice_item)
        db.session.commit()
        return '', 204
Esempio n. 19
0
def check():
    form = InvoiceForm()
    if form.validate_on_submit():
        invoice = Invoice(
            form.data['amount'],
            form.data['currency'],
            form.data['description']
        )
        db.session.add(invoice)
        db.session.commit()
        app.logger.info(u"invoice created: {}".format(invoice))

        # hack for passing signature check
        amount = int(invoice.amount) if (
            int(invoice.amount) == float(invoice.amount)) else invoice.amount

        payload = {
            "shop_id": SHOP_ID,
            "amount": amount,
            "currency": invoice.currency,
            'shop_invoice_id': invoice.id,
            "description": invoice.description
        }
        if invoice.currency == '980':
            payload["payway"] = 'w1_uah'
            sign = _get_sign(payload, INVOICE_KEYS)
            payload['sign'] = sign
            resp = requests.post(UAH_INVOICE_URL, json=payload)
            data = json.loads(resp.content)['data']
            app.logger.info("data: {}".format(data))
            if not data:
                return jsonify(json.loads(resp.content))
            url = data['source']
            data = data['data']

        elif invoice.currency == '643':
            sign = _get_sign(payload, TIP_KEYS)
            payload['sign'] = sign
            data = payload
            url = TIP_URL

        else:
            return jsonify({'result': 'error', 'message': 'Wrong currency'})

        app.logger.info("data sent: {}".format(data))

        return jsonify({'result': 'ok', 'data': data, 'url': url})
    return jsonify({'result': 'error', 'message': 'Form validation error'})
Esempio n. 20
0
    def make_invoices(self, changing=False, proration=0):
        if not changing:
            for invoice in self.policy.invoices:
                invoice.delete()

        invoices = []
        invoices_to_create = self.billing_schedules.get(self.policy.billing_schedule)

        if changing:
            if proration == 0:
                logger.error("can't change policy with no invoices emitted")
                db.session.rollback()
                return
            invoices_to_create = proration

        if self.policy.billing_schedule in self.scheduling_interval:
            for i in range(0, invoices_to_create):
                months_after_eff_date = i * self.scheduling_interval[self.policy.billing_schedule]
                bill_date = self.policy.effective_date + relativedelta(months=months_after_eff_date)

                logger.debug(
                    "Creating [%s] Invoice => policy_id: %s / bill_date: %s / due_date: %s / cancel_date: %s / amount_due: %s",
                    self.policy.billing_schedule,
                    self.policy.id,
                    bill_date,
                    bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=1, days=14),
                    self.policy.annual_premium / self.billing_schedules.get(self.policy.billing_schedule))

                invoice = Invoice(self.policy.id,
                                  bill_date,
                                  bill_date + relativedelta(months=1),
                                  bill_date + relativedelta(months=1, days=14),
                                  self.policy.annual_premium / self.billing_schedules.get(self.policy.billing_schedule))
                invoices.append(invoice)
        elif self.policy.billing_schedule == "Annual":
            pass
        else:
            logger.info("You have chosen a bad billing schedule.")
            db.session.rollback()

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
Esempio n. 21
0
def invoices(id=None):
    if request.method == 'GET':
        if id is not None:
            invoice = Invoice.query.get(
                id)  # None por defecto si no consigue el registro
            if invoice:
                return jsonify(invoice.serialize()), 200
            return jsonify({"msg": "Invoice not found"}), 404
        else:
            invoice = Invoice.query.all()
            invoice = list(map(lambda invoice: invoice.serialize(), invoice))
            return jsonify(invoice), 200

    if request.method == 'POST':

        urlPDF = request.json.get("urlPDF", None)
        date = request.json.get("data", None)
        amount = request.json.get("amount", None)
        rut = request.json.get("rut", None)

        if not urlPDF:
            return jsonify({"msg": "URL is required"}), 400
        if not date:
            return jsonify({"msg": "Date is required"}), 400
        if not amount:
            return jsonify({"msg": "Amount is required"}), 400
        if not rut:
            return jsonify({"msg": "RUT is required"}), 400

        invoice = Invoice.query.filter_by(id=id).first()
        if invoice:
            return jsonify({"msg": "Invoice already exists"}), 400

        invoice = Invoice()
        invoice.urlPDF = urlPDF
        invoice.date = date
        invoice.amount = amount
        invoice.rut = rut

        invoice.save()

        return jsonify({"success": "Invoice Register Successfully"}), 200
Esempio n. 22
0
def checkTime():
    timelist = []
    routedata = Booking.query.filter_by(user=g.id)
    ctime = datetime.now()
    ct = datetime.timestamp(ctime)
    for i in routedata:
        bt = datetime.timestamp(i.date)
        rt = bt - ct
        timelist.append(rt)

    for data, rmt in zip(routedata, timelist):
        if rmt <= 0:
            entry = Invoice(user=data.user,
                            date=data.date,
                            fare=20,
                            route=data.route,
                            bussClass=data.bussClass)
            db.session.add(entry)
            Booking.query.filter_by(id=data.id).delete()
            db.session.commit()
Esempio n. 23
0
        def invoice_frequency(months_next_invoice):
            """helper function to determine number of invoices"""
            next_invoice.amount_due = remaining_balance / \
                (billing_schedules.get(
                    self.policy.billing_schedule))
            for i in range(1,
                           billing_schedules.get(
                               self.policy.billing_schedule)):
                months_after_eff_date = (i * months_next_invoice)

                bill_date = next_payment_date + \
                    relativedelta(months=months_after_eff_date)

                invoice = Invoice(
                    self.policy.id, bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=2),
                    bill_date + relativedelta(months=2, days=14),
                    remaining_balance /
                    billing_schedules.get(self.policy.billing_schedule))
                invoices.append(invoice)
Esempio n. 24
0
File: views.py Progetto: s4li/mahar
def zarinpal( sale_plan_id, course_id = 0): 
    user_id = int(session_f['user_id']) 
    s = Session()
    ZARINPAL_WEBSERVICE  = 'https://www.zarinpal.com/pg/services/WebGate/wsdl'
    MMERCHANT_ID = '46c993a0-9bed-11ea-8c18-000c295eb8fc'
    invoice_date= datetime.now().strftime('%Y/%m/%d %H:%M:%S')
    client = Client(ZARINPAL_WEBSERVICE)
    sale_plan = s.query(Sale_plan).filter(Sale_plan.id == sale_plan_id).first()
    user = s.query(User).filter(User.id == user_id).first()
    if not (sale_plan or user):
        result = {"result":"user or sale plane id not found"}
        status_code = 401
    else:
        callback_url = f'{BASE_URL}/zarinpal-callback' 
        result_zarinpal = client.service.PaymentRequest(MMERCHANT_ID,
                                           sale_plan.price,
                                           sale_plan.title,
                                           user.mobile,
                                           '*****@*****.**',
                                           callback_url)                                 
        if result_zarinpal.Status == 100:
            if sale_plan_id == '3' : 
                lesson_ids = s.query(Lesson.id).filter(Lesson.course_id == course_id).all()
                str_lesson = ''
                for lesson_id in lesson_ids:
                    if str(lesson_id[0]) not in ['1','9','16','20','32','42']:
                        str_lesson = str_lesson +str(lesson_id[0]) + ","
                lessons = str_lesson[:-1]
            else:
                lessons = sale_plan.lessons        
            invoice = Invoice( invoice_no = result_zarinpal.Authority,  datetime = invoice_date , sale_plan_id = sale_plan_id, user_id = user_id, lessons = lessons, verify= -1)
            s.add(invoice)
            s.commit()
            s.close()
            zarinpal_url = f'https://www.zarinpal.com/pg/StartPay/{result_zarinpal.Authority}'
            s.commit()        
            s.close() 
            return redirect(zarinpal_url)
        else:
            flash('با عرض پوزش در هنگام اتصال به درگاه بانک خطایی رخ داده است!','danger')
            return redirect(url_for("confirm_purchase_information"))
def add_invoice():
    product = Product(name=f'Produkt testowy {random.randint(1, 1000)}')
    for _ in range(3):
        product.stocks.append(
            ProductStock(quantity=random.randint(1, 10), purchase_price=1))
    invoice = Invoice(account=random.choice(accounts),
                      invoice_amount=10,
                      invoice_number=str(
                          random.randint(1, 9) * 100 +
                          random.randint(0, 9) * 10 + random.randint(0, 9)),
                      invoice_date=datetime.datetime.today())

    for _ in range(5):
        invoice_item = InvoiceItem(product=product,
                                   name=product.name,
                                   quantity=1,
                                   price=2,
                                   discount=0)
        invoice.invoice_items.append(invoice_item)

    session.add(invoice)
    session.commit()
Esempio n. 26
0
def new_invoice_excel():
    excel_file = request.get_dict(field_name='invoice_file')
    samsung_keys = (
        'Shipped Parts',
        'Qty',
        'Amount',
        'Delivery No',
        'P/O No',
        'Description',
        'Tracking No',
    )
    # Check for valid Samsung invoice format
    if all(k in excel_file for k in samsung_keys):
        invoice_number = excel_file['Delivery No'][0]
        if Invoice.query.get(invoice_number):
            flash('This invoice already exists', 'alert-danger')
            return redirect(url_for('invoices'))
        invoice = Invoice(invoice_number=invoice_number)
        for idx, part_number in enumerate(excel_file['Shipped Parts']):
            qty = int(excel_file['Qty'][idx])
            purchase_order_number = excel_file['P/O No'][idx]
            description = excel_file['Description'][idx].strip()
            price = float(excel_file['Amount'][idx]) / qty
            part = Part.get_or_create(part_number, db.session)
            part.description = description
            part.price = price
            for _ in range(qty):
                invoice_detail = InvoiceDetail(
                    invoice_number=invoice_number,
                    purchase_order_number=purchase_order_number,
                )
                invoice_detail.part = part
                invoice.parts.append(invoice_detail)
        db.session.add(invoice)
        db.session.commit()
        flash('Imported excel file successfully', 'alert-success')
    else:
        flash('Invalid file, try again', 'alert-danger')
    return redirect(url_for('invoices'))
Esempio n. 27
0
def add_invoice():
    account = session.query(Account).first()
    product = Product(name='Produkt testowy')
    for _ in range(3):
        product.stocks.append(
            ProductStock(quantity=random.randint(1, 10), purchase_price=1))

    invoice = Invoice(account=account,
                      invoice_amount=2,
                      invoice_number='123',
                      invoice_date=datetime.datetime.today())

    for _ in range(5):
        invoice_item = InvoiceItem(product=product,
                                   name='Zakup: ' + product.name,
                                   quantity=1,
                                   price=2,
                                   discount=0)
        invoice.invoice_items.append(invoice_item)

    session.add(invoice)
    session.commit()
Esempio n. 28
0
    def create_new_invoices(self,
                            invoices_left=None,
                            start_date=None,
                            due_now=None):
        billing_schedules = {
            'Annual': 1,
            'Two-Pay': 2,
            'Quarterly': 4,
            'Monthly': 12
        }

        if not invoices_left:
            invoices_left = billing_schedules.get(self.policy.billing_schedule)
        if not start_date:
            start_date = self.policy.effective_date
        if not due_now:
            due_now = self.policy.annual_premium

        invoices = []

        if self.policy.billing_schedule in billing_schedules:
            for i in range(0, invoices_left):
                months_after_eff_date = i * 12 / billing_schedules.get(
                    self.policy.billing_schedule)
                bill_date = start_date + relativedelta(
                    months=months_after_eff_date)
                invoice = Invoice(self.policy.id, bill_date,
                                  bill_date + relativedelta(months=1),
                                  bill_date + relativedelta(months=1, days=14),
                                  due_now / invoices_left)
                invoices.append(invoice)
        else:
            print "You have chosen a bad billing schedule."

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()
Esempio n. 29
0
def new_invoice_post():
    invoice_number = request.form['invoice_number']
    received_date = us_to_sql_date(request.form['date_received']),
    part_numbers = filter(None, request.form.getlist('part_numbers[]'))
    part_numbers = [x.upper() for x in part_numbers]
    assoc_pos = request.form.getlist('assoc_pos[]')
    shelf_locations = request.form.getlist('shelf_locations[]')
    if Invoice.query.get(invoice_number):
        flash("The invoice number has already existed", 'alert-danger')
        return redirect(url_for('new_invoice'))
    invoice = Invoice(invoice_number=invoice_number,
                      received_date=received_date)
    for idx, x in enumerate(part_numbers):
        invoice_detail = InvoiceDetail(
            purchase_order_number=assoc_pos[idx],
            shelf_location=shelf_locations[idx],
        )
        part = Part.get_or_create(x, db.session)
        invoice_detail.part = part
        invoice.parts.append(invoice_detail)
    db.session.add(invoice)
    db.session.commit()
    flash('Invoice created successfully', 'alert-success')
    return redirect(url_for('invoices'))
Esempio n. 30
0
    def make_invoices(self):
        for invoice in self.policy.invoices:
            invoice.delete()

        billing_schedules = {
            'Annual': None,
            'Semi-Annual': 3,
            'Quarterly': 4,
            'Monthly': 12
        }

        invoices = []
        first_invoice = Invoice(
            self.policy.id,
            self.policy.effective_date,  #bill_date
            self.policy.effective_date + relativedelta(months=1),  #due
            self.policy.effective_date +
            relativedelta(months=1, days=14),  #cancel
            self.policy.annual_premium)
        invoices.append(first_invoice)

        if self.policy.billing_schedule == "Annual":
            pass
        elif self.policy.billing_schedule == "Two-Pay":
            first_invoice.amount_due = first_invoice.amount_due / billing_schedules.get(
                self.policy.billing_schedule)
            for i in range(1,
                           billing_schedules.get(
                               self.policy.billing_schedule)):
                months_after_eff_date = i * 6
                bill_date = self.policy.effective_date + relativedelta(
                    months=months_after_eff_date)
                invoice = Invoice(
                    self.policy.id, bill_date,
                    bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=1, days=14),
                    self.policy.annual_premium /
                    billing_schedules.get(self.policy.billing_schedule))
                invoices.append(invoice)
        elif self.policy.billing_schedule == "Quarterly":
            first_invoice.amount_due = first_invoice.amount_due / billing_schedules.get(
                self.policy.billing_schedule)
            for i in range(1,
                           billing_schedules.get(
                               self.policy.billing_schedule)):
                months_after_eff_date = i * 3
                bill_date = self.policy.effective_date + relativedelta(
                    months=months_after_eff_date)
                invoice = Invoice(
                    self.policy.id, bill_date,
                    bill_date + relativedelta(months=1),
                    bill_date + relativedelta(months=1, days=14),
                    self.policy.annual_premium /
                    billing_schedules.get(self.policy.billing_schedule))
                invoices.append(invoice)
        elif self.policy.billing_schedule == "Monthly":
            pass
        else:
            print "You have chosen a bad billing schedule."

        for invoice in invoices:
            db.session.add(invoice)
        db.session.commit()