예제 #1
0
    def test_only_items(self):
        invoice_path = os.path.join(self.file_base_dir, 'only_items.pdf')
        if os.path.exists(invoice_path):
            os.remove(invoice_path)

        invoice = SimpleInvoice(invoice_path)

        # Before add items
        item_data, item_subtotal = invoice._item_raw_data_and_subtotal()
        self.assertEqual(len(item_data), 0)
        self.assertEqual(item_subtotal, Decimal('0'))
        item_data, style = invoice._item_data_and_style()
        self.assertEqual(len(item_data), 0)
        self.assertEqual(style, [])

        # Add items
        invoice.add_item(Item('Item1', 'Item desc', 1, 1.1))
        invoice.add_item(Item('Item2', 'Item desc', 2, u'2.2'))
        invoice.add_item(Item(u'Item3', 'Item desc', 3, '3.3'))

        # After add items
        items = invoice.items
        self.assertEqual(len(items), 3)
        self.assertEqual(items[0].name, 'Item1')
        self.assertEqual(items[0].amount, Decimal('1.1'))
        self.assertEqual(items[1].amount, Decimal('4.4'))
        self.assertEqual(items[2].name, u'Item3')
        self.assertEqual(items[2].amount, Decimal('9.9'))

        item_data, item_subtotal = invoice._item_raw_data_and_subtotal()
        self.assertEqual(item_subtotal, Decimal('15.4'))
        self.assertEqual(len(item_data), 3)

        item_data, style = invoice._item_data_and_style()
        self.assertEqual(len(item_data), 6)  # header, subtotal, total
        self.assertEqual(item_data[-2][-1], Decimal('15.4'))  # subtotal
        self.assertEqual(item_data[-1][-1], Decimal('15.4'))  # total

        # test style
        # ## Subtotal
        self.assertEqual(style[-4], ('SPAN', (0, 4), (3, 4)))
        self.assertEqual(style[-3], ('ALIGN', (0, 4), (-2, -1), 'RIGHT'))
        # ## Total
        self.assertEqual(style[-2], ('SPAN', (0, 5), (3, 5)))
        self.assertEqual(style[-1], ('ALIGN', (0, 5), (-2, -1), 'RIGHT'))

        invoice.finish()

        self.assertTrue(os.path.exists(invoice_path))
예제 #2
0
    def createInvoice(ID, job):
        doc = SimpleInvoice('invoice.pdf')

        # Paid stamp, optional
        doc.is_paid = True

        doc.invoice_info = InvoiceInfo(
            1023, datetime.now(), datetime.now())  # Invoice info, optional

        companyName = Company.getName(ID)
        companyAddress = Company.getAddress(ID)
        companyCity = Company.getCity(ID)
        companyPostcode = Company.getPostcode(ID)
        companyPhone = Company.getPhone(ID)
        companyAccNumber = Company.getAccNumber(ID)
        companySortCode = Company.getSort(ID)
        # Service Provider Info, optional
        doc.service_provider_info = ServiceProviderInfo(
            name=companyName,
            street=companyAddress,
            city=companyCity,
            post_code=companyPostcode,
            vat_tax_number='Vat/Tax number')

        clientName = Customers.getName(ID)
        clientAddress = Customers.getAddress(ID)
        clientCity = Customers.getCity(ID)
        clientPostcode = Customers.getPostcode(ID)
        # Client info, optional
        doc.client_info = ClientInfo(name=clientName,
                                     street=clientAddress,
                                     city=clientCity,
                                     post_code=clientPostcode,
                                     email='*****@*****.**')
        invoiceMaterials = JobMaterials.getInvoiceMaterials(job)

        for each in invoiceMaterials:
            materialName = each[0]
            pricePerUnit = each[1]
            desc = each[2]
            quantity = each[3]
            doc.add_item(Item(materialName, desc, quantity, pricePerUnit))
        # Add Item
        #doc.add_item(Item('Item', 'Item desc', 1, '1.1'))
        #doc.add_item(Item('Item', 'Item desc', 2, '2.2'))
        #doc.add_item(Item('Item', 'Item desc', 3, '3.3'))

        # Tax rate, optional
        doc.set_item_tax_rate(20)  # 20%

        ## Transactions detail, optional
        #doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
        #doc.add_transaction(Transaction('Stripe', 222, date.today(), 2))

        # Optional
        doc.set_bottom_tip(
            "Email: [email protected]<br />Don't hesitate to contact us for any questions."
        )

        doc.finish()
예제 #3
0
def createLineInvoice(line, current_user):
    invoiceNumber = str(line[0])
    invoiceDueDate = line[6]
    unitCount = line[7]
    unitPrice = line[8]
    invoiceDesc = line[4]
    clientEmail = line[2]
    clientName = line[1]
    invoiceAmt = line[9]
    invoice = Invoice(invoiceNumber, clientName, clientEmail, current_user.id,
                      unitCount, unitPrice, invoiceAmt, invoiceDueDate,
                      datetime.today().strftime('%d-%m-%y'), invoiceDesc)
    db.session.add(invoice)
    db.session.commit()
    doc = SimpleInvoice('invoice' + str(invoice.id) + '.pdf')
    doc.invoice_info = InvoiceInfo(line[0], datetime.today(), invoiceDueDate)
    business = Business.query.filter_by(id=current_user.id).first()
    doc.service_provider_info = ServiceProviderInfo(
        name=business.name,
        street=business.street,
        city=business.city,
        state=business.state,
    )
    doc.client_info = ClientInfo(email=clientEmail, name=clientName)
    doc.add_item(Item(invoiceDesc, line[5], unitCount, unitPrice))
    doc.finish()
    return invoice
예제 #4
0
    def GenerateCustomerInvoice(self, invoicenumber, clientemail,
                                reservationtype, quantity, amountInclVAT,
                                amountExVAT, vatAmount, productname):
        #invoice number should be int
        #client email we need to receive
        #reservationtype = upfront reservation or instant reservation
        #quantity = numbers of units purchased
        #amountExVAT = amount paid excluding vat
        #VAT = Vat % (21)

        try:
            pathtoInvoice = self.INV_COMP_PATH + invoicenumber + ".pdf"
            doc = SimpleInvoice(pathtoInvoice,
                                precision=self.INV_COMP_PRECISION)

            # Paid stamp, optional
            doc.is_paid = True

            doc.invoice_info = InvoiceInfo(
                invoicenumber, datetime.now(),
                datetime.now())  # Invoice info, optional

            # Service Provider Info, optional
            doc.service_provider_info = ServiceProviderInfo(
                name=self.INV_COMP_NAME,
                street=self.INV_COMP_STREET + " " + self.INV_COMP_NR,
                city=self.INV_COMP_CITY,
                state=self.INV_COMP_STATE,
                country=self.INV_COMP_COUNTRY,
                post_code=self.INV_COMP_POSTAL,
                vat_tax_number=self.INV_COMP_VATNR)

            # Client info, optional
            doc.client_info = ClientInfo(email=clientemail)

            # Add Item
            #doc.add_item(Item(productname, reservationtype, quantity, amountExVAT))
            doc.add_item(
                Item(productname, reservationtype, quantity, amountInclVAT,
                     amountExVAT, vatAmount))
            #doc.add_item(Item('Item', 'Item desc', 2, '2.2'))
            #doc.add_item(Item('Item', 'Item desc', 3, '3.3'))

            # Tax rate, optional
            doc.set_item_tax_rate(self.INV_COMP_TAXRATE)

            # Transactions detail, optional
            # doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
            # doc.add_transaction(Transaction('Strip', 222, date.today(), 2))

            # Optional
            doc.set_bottom_tip(self.INV_COMP_FOOT)

            doc.finish()
            return pathtoInvoice
        except StandardError:
            print "Unexpected error"
            return "error"
예제 #5
0
    def test_only_items_with_tax_rate(self):
        invoice_path = os.path.join(self.file_base_dir,
                                    'only_items_with_tax.pdf')
        if os.path.exists(invoice_path):
            os.remove(invoice_path)

        invoice = SimpleInvoice(invoice_path)

        # Before add items
        item_data, item_subtotal = invoice._item_raw_data_and_subtotal()
        self.assertEqual(len(item_data), 0)
        self.assertEqual(item_subtotal, Decimal('0'))
        item_data, style = invoice._item_data_and_style()
        self.assertEqual(len(item_data), 0)
        self.assertEqual(style, [])

        # Add items
        invoice.add_item(Item('Item1', 'Item desc', 1, 1.1))
        invoice.add_item(Item('Item2', 'Item desc', 2, u'2.2'))
        invoice.add_item(Item(u'Item3', 'Item desc', 3, '3.3'))
        # set tax rate
        invoice.set_item_tax_rate(19)

        # After add items
        items = invoice.items
        self.assertEqual(len(items), 3)
        self.assertEqual(items[0].name, 'Item1')
        self.assertEqual(items[0].amount, Decimal('1.1'))
        self.assertEqual(items[1].amount, Decimal('4.4'))
        self.assertEqual(items[2].name, u'Item3')
        self.assertEqual(items[2].amount, Decimal('9.9'))

        item_data, item_subtotal = invoice._item_raw_data_and_subtotal()
        self.assertEqual(item_subtotal, Decimal('15.4'))
        self.assertEqual(len(item_data), 3)

        item_data, style = invoice._item_data_and_style()
        self.assertEqual(len(item_data), 7)  # header, subtotal, tax, total
        self.assertEqual(item_data[-3][-1], Decimal('15.4'))  # subtotal
        self.assertEqual(item_data[-2][-1], Decimal('2.93'))  # tax
        self.assertEqual(item_data[-1][-1], Decimal('18.33'))  # total

        invoice.finish()

        self.assertTrue(os.path.exists(invoice_path))
예제 #6
0
    def test_simple(self):
        invoice_path = os.path.join(self.file_base_dir, 'simple.pdf')

        if os.path.exists(invoice_path):
            os.remove(invoice_path)

        doc = SimpleInvoice(invoice_path)

        doc.is_paid = True

        doc.invoice_info = InvoiceInfo(1023, datetime.now(), datetime.now())

        doc.service_provider_info = ServiceProviderInfo(
            name='PyInvoice',
            street='My Street',
            city='My City',
            state='My State',
            country='My Country',
            post_code='222222',
            vat_tax_number='Vat/Tax number')

        doc.client_info = ClientInfo(email='*****@*****.**')

        doc.add_item(Item('Item', 'Item desc', 1, '1.1'))
        doc.add_item(Item('Item', 'Item desc', 2, '2.2'))
        doc.add_item(Item('Item', 'Item desc', 3, '3.3'))

        items = doc.items
        self.assertEqual(len(items), 3)

        doc.set_item_tax_rate(20)  # 20%

        doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
        doc.add_transaction(Transaction('Stripe', 222, date.today(), 2))

        transactions = doc.transactions
        self.assertEqual(len(transactions), 2)

        doc.set_bottom_tip(
            "Email: [email protected]<br />Don't hesitate to contact us for any questions."
        )

        doc.finish()

        self.assertTrue(os.path.exists(invoice_path))
예제 #7
0
def imaker(fName,
           id,
           duedate,
           clientId,
           clientName,
           clientMobileNumber,
           prods,
           discountNo,
           amtRecieved,
           dateTime=datetime.now()):

    #fname: filename
    #id: invoice id, type: str or int or unicode
    #duedate: invoice duedate: str or int or unicode
    #clientId: passed in client_info. type: str or int or unicode
    #clientName: type is str ot unicode
    #clientMobileNumber. type: int or str or unicode
    #prods is a list which makes the item table
    #prods -> name, description price, quantity
    #discountNo: passes into the function which sets the discount rate. type: int
    #amtRecieved so far

    doc = SimpleInvoice(fName)

    # Paid stamp, optional
    doc.is_paid = False

    doc.invoice_info = InvoiceInfo(id, dateTime,
                                   duedate)  # Invoice info, optional

    # Service Provider Info, optional
    doc.service_provider_info = ServiceProviderInfo(name='Salman Wholeseller',
                                                    mobileNumber='03362510211')

    # Client info, optional
    doc.client_info = ClientInfo(
        client_id=clientId,
        name=clientName,
        mobileNumber=clientMobileNumber,
    )

    # Add Item
    for x in prods:
        doc.add_item(Item(x[0], x[1], x[2], x[3], x[4]))

    # Tax rate, optional

    doc.set_item_discount_rate(discountNo)  # 20%

    doc.set_amount_recieved(amtRecieved)

    doc.finish()
예제 #8
0
def create_pdf(invoice_file, input_dict):
    """
    function for creating pdf
    :param invoice_file:
    :param input_dict:
    :return:
    """
    from pyinvoice.models import InvoiceInfo, ServiceProviderInfo, ClientInfo, Item
    from pyinvoice.templates import SimpleInvoice

    d = input_dict
    print('generating pdf')
    doc = SimpleInvoice(invoice_file)
    doc.is_paid = d['paid']

    doc.invoice_info = InvoiceInfo(d['invoice_id'], d['created_on'],
                                   d['expires_on'],
                                   f"{d['company_expiration_fee']} %")

    # Service Provider Info, optional
    doc.service_provider_info = ServiceProviderInfo(
        name=d['company_name'],
        street=d['company_address'],
        city=d['company_city'],
        post_code=d['company_zip_code'],
        vat_tax_number=d['company_vat'])

    doc.client_info = ClientInfo(name=d['customer_name'],
                                 client_id=d['customer_id'],
                                 street=d['customer_address'],
                                 city=d['customer_city'],
                                 post_code=d['customer_zip_code'])

    for item in d['item_list']:
        if item['tax_free']:
            item['name'] += ' momsfri'
        doc.add_item(Item(item['name'], '', item['quantity'],
                          item['cost_per']))

    # Tax rate, optional
    doc.set_item_tax_rate(d['tax_percantage'])  # 25%

    # Optional
    doc.set_bottom_tip(
        f"Email: {d['company_email']}<br />Kontonummer: {d['company_account']}<br />Godkänd för F-skatt<br />Vid frågor kontakt på {d['company_phone_number']}.<br />{d['extra_info']}"
    )
    doc.finish()
예제 #9
0
    def createInvoice(datafields):
        doc = SimpleInvoice('invoice.pdf')

        # Paid stamp, optional
        doc.is_paid = True

        doc.invoice_info = InvoiceInfo(
            1023, datetime.now(), datetime.now())  # Invoice info, optional

        # Service Provider Info, optional
        doc.service_provider_info = ServiceProviderInfo(
            name='pyInvoice',
            street='My Street',
            city='My City',
            state='My State',
            country='My Country',
            post_code='222222',
            vat_tax_number='Vat/Tax number')

        # Client info, optional
        doc.client_info = ClientInfo(email='*****@*****.**')

        # Add Item
        itemCount = 0
        for item in range(len(datafields)):
            doc.add_item(
                Item(datafields[itemCount]['product'], 'Item Desc',
                     int(datafields[itemCount]['quantity']),
                     str(datafields[itemCount]['rate'])))
            itemCount += 1

        # Tax rate, optional
        doc.set_item_tax_rate(int(datafields[0]['gstrate']))  # 20%

        # Transactions detail, optional
        doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
        doc.add_transaction(Transaction('Stripe', 222, date.today(), 2))

        # Optional
        doc.set_bottom_tip(
            "Email: [email protected]<br />Don't hesitate to contact us for any questions."
        )

        doc.finish()
예제 #10
0
def build_invoice(invoice_config):
    net = invoice_config['agreement_info'].get('net', 30)
    invoice_number = get_invoice_number(
        invoice_config['client_info']['client_id'])

    doc = SimpleInvoice(PDF_PATH)
    doc.invoice_info = InvoiceInfo(invoice_number, datetime.now(),
                                   datetime.now() + timedelta(days=net))
    doc.service_provider_info = ServiceProviderInfo(
        **invoice_config['service_provider_info'])
    doc.client_info = ClientInfo(**invoice_config['client_info'])

    for item in invoice_config['line_items']:
        doc.add_item(Item(**item))

    doc.set_bottom_tip(
        "Thanks for your business!<br />Email: {}<br />Don't hesitate to contact us for any questions."
        .format(invoice_config['agreement_info']['provider_email']))

    doc.finish()
예제 #11
0
    def generate_pdf(self, order, user):
        invoice_doc = SimpleInvoice('invoice.pdf')

        # Paid stamp, optional
        invoice_doc.is_paid = False
        invoice_doc.invoice_info = InvoiceInfo(
            order.id, datetime.now(), datetime.now())  # Invoice info, optional

        # Service Provider Info, optional
        invoice_doc.service_provider_info = ServiceProviderInfo(
            name='Azen Store',
            street='Somewhere in Guatemala',
            city='Guatemala',
            state='Guatemala',
            country='Guatemala',
            post_code='0100X',
        )

        order_items = OrderItem.objects.filter(order=order).all()

        # Client info, optional
        invoice_doc.client_info = ClientInfo(client_id=user.id,
                                             name=user.username)

        for order_item in order_items:
            # Add Item
            invoice_doc.add_item(
                Item(order_item.product.name, 'Item', order_item.quantity,
                     order_item.product.price))

        # Tax rate, optional
        invoice_doc.set_item_tax_rate(0)  # 0%
        # Optional
        invoice_doc.set_bottom_tip(
            "Email: [email protected]<br />Don't hesitate to contact us for any questions.<br />Coupons are applied in payments..."
        )

        invoice_doc.finish()
예제 #12
0
    def genPD(self, sales_refno, number):
        amount = 0
        try:
            doc = SimpleInvoice('invoice2.pdf')

            # Paid stamp, optional
            doc.is_paid = True
            mydb = mysql.connector.connect(host="localhost",
                                           user="******",
                                           passwd="admin",
                                           database="invoice")
            cursor2 = mydb.cursor()
            invoice_refno = list()
            r = random.randint(100, 1000)
            cursor2.execute("select invoice_refno from bill_info")
            check = cursor2.fetchall()
            for i in check:
                checklist = i
                if r not in invoice_refno or r not in checklist:
                    invoice_refno.append(r)
                    break
            invoiceNumber = r
            doc.invoice_info = InvoiceInfo(
                invoiceNumber, datetime.now(),
                datetime.now())  # Invoice info, optional

            # Service Provider Info, optional
            doc.service_provider_info = ServiceProviderInfo(
                name='Python shop',
                street='23, Bakers Street, Dehradun',
                city='Dehradun',
                state='Uttarakhand',
                country='India',
                post_code='248009',
                #vat_tax_number='Vat/Tax number'
            )

            # Client info, optional
            doc.client_info = ClientInfo(
                email='*****@*****.**')
            cursor2.execute("select * from sales_desc where sales_refno = " +
                            str(sales_refno))
            details = cursor2.fetchall()
            #add items in pdf
            for iterate in details:
                if iterate[1] == "b01":
                    name = "parle-g"
                    desc = "glucose biscuit 50g"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                elif iterate[1] == "b02":
                    name = "milk-bikis"
                    desc = "glucose biscuit 50g"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                elif iterate[1] == "cr01":
                    name = "ponds face cream"
                    desc = "face cream 100g"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                elif iterate[1] == "hw01":
                    name = "dettol hand wash"
                    desc = "anti-bacterial hand wash"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                elif iterate[1] == "j01":
                    name = "levis jeans"
                    desc = "levis jeans indigo colour waist:- 38 height:- 40"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                elif iterate[1] == "ts01":
                    name = "octave tshirts"
                    desc = "pack of 3 tshirts(red/green/blue)"
                    doc.add_item(
                        Item(name, desc, iterate[2],
                             str(iterate[3] / iterate[2])))
                    amount += int(iterate[3])

                else:
                    print("item will be added to database soon......")

            # Tax rate, optional
            doc.set_item_tax_rate(5.25)  # 5.25%
            total_amount = (amount * (5.25 / 100)) + amount
            print(total_amount)

            #store bill info in database
            cursor2.execute("select cid from customer_detail where cmno = " +
                            str(number))
            getCustomerId = cursor2.fetchone()
            sql = "insert into bill_info(sales_refno,total_amount,cid,date,invoice_refno) values(%s,%s,%s,%s,%s)"
            val = (sales_refno, total_amount, getCustomerId[0],
                   str(datetime.now()), invoiceNumber)
            cursor2.execute(sql, val)
            mydb.commit()

            #Transactions detail, optional
            doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
            doc.add_transaction(Transaction('Stripe', 222, date.today(), 2))

            # Optional
            doc.set_bottom_tip(
                "Email: [email protected]<br />Feel Free to contact us for any queries."
            )

        except mysql.connector.Error as e:
            print("database not working......currently working on fix.....")
            print(e)
#to display flash message set 1
        finally:

            import requests
            url = "https://www.fast2sms.com/dev/bulk"
            querystring = {
                "authorization":
                "n0BJ1r8yP2hOapZUmHcNFEgbvAuxeQXiG5Y3CS7MI9qLdjfok4gRtoI36EPh97QXUm0x2L85dkrzVwnf",
                "sender_id": "FSTSMS",
                "message": "Bill Generated!",
                "language": "english",
                "route": "p",
                "numbers": number,
                "flash": "1"
            }

            headers = {'cache-control': "no-cache"}
            response = requests.request("GET",
                                        url,
                                        headers=headers,
                                        params=querystring)
            doc.finish()
            mydb.close()
            os._exit(0)
예제 #13
0
def generate_invoice(response, invoice_obj):
    customer = invoice_obj.customer
    doc = SimpleInvoice(
        response,
        pagesize="A4",
        provider_header=settings.COMPANY_NAME,
        client_header=customer.name,
        provider_address=settings.COMPANY_ADDRESS,
        client_address=customer.address.name,
    )

    # Paid stamp, optional
    doc.is_paid = True

    doc.service_provider_info = ServiceProviderInfo()
    doc.invoice_info = InvoiceInfo(invoice_obj.id, invoice_obj.created_at)

    doc.client_info = ClientInfo(
        name=customer.name,
        street=customer.address.name,
        city=_get_customer_active_accounts(customer),
    )

    # Add Item
    this_month = datetime.today().replace(day=15).date()
    accounts = invoice_obj.accounts.all()
    monthly_credit_count = 0
    monthly_penalty_count = 0
    total_credit = 0
    total_penalty = 0
    for account in accounts:
        for deposit in account.deposits.all():
            if deposit.date == this_month:
                monthly_credit_count += 1
                total_credit += deposit.principal
                total_penalty += deposit.penalty
                if deposit.penalty > 0:
                    monthly_penalty_count += 1

    total_loan_count = 0
    total_loan_principal = 0
    total_loan_interest = 0
    total_loan_penalty = 0
    total_penalty_count = 0
    for loan in customer.loans.all():
        for deposit in loan.deposits.all():
            if deposit.date == this_month:
                total_loan_count += 1
                total_loan_principal += deposit.principal
                total_loan_penalty += deposit.penalty
                total_loan_interest += deposit.interest
                if deposit.penalty > 0:
                    total_penalty_count += 1

    details = {
        "Account Credit": [monthly_credit_count, total_credit],
        "Account Penalty": [monthly_penalty_count, total_penalty],
        "Loan Principal": [total_loan_count, total_loan_principal],
        "Loan Interest": [total_loan_count, total_loan_interest],
        "Loan Penalty": [total_penalty_count, total_loan_penalty],
    }
    for key, value in details.items():
        doc.add_item(Item(key, value[0], value[1]))

    doc.set_bottom_tip("Don't hesitate to contact us for any questions!")

    doc.finish()

    invoice_obj.detail = details
    invoice_obj.save()
# Service Provider Info, optional
doc.service_provider_info = ServiceProviderInfo(
    name='PyInvoice',
    street='My Street',
    city='My City',
    state='My State',
    country='My Country',
    post_code='222222',
    vat_tax_number='Vat/Tax number'
)

# Client info, optional
doc.client_info = ClientInfo(email='*****@*****.**')

# Add Item
doc.add_item(Item('Item', 'Item desc', 1, '1.1'))
doc.add_item(Item('Item', 'Item desc', 2, '2.2'))
doc.add_item(Item('Item', 'Item desc', 3, '3.3'))

# Tax rate, optional
doc.set_item_tax_rate(20)  # 20%

# Transactions detail, optional
doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
doc.add_transaction(Transaction('Strip', 222, date.today(), 2))

# Optional
doc.set_bottom_tip("Email: [email protected]<br />Don't hesitate to contact us for any questions.")

doc.finish()
예제 #15
0
doc.invoice_info = InvoiceInfo(1023, datetime.now(), datetime.now())  # Invoice info, optional

# Service Provider Info, optional
doc.service_provider_info = ServiceProviderInfo(
    name='PyInvoice',
    street='My Street',
    city='My City',
    state='My State',
    country='My Country',
    post_code='222222',
    vat_tax_number='Vat/Tax number'
)

# Client info, optional
doc.client_info = ClientInfo(email='*****@*****.**')
itemList=[Item('Item', 'Item desc', 1, '1.1'),Item('Item', 'Item desc', 2, '2.2')]
# Add Item
doc.add_item(itemList[0])
doc.add_item(itemList[1])
#doc.add_item(Item('Item', 'Item desc', 1, '1.1'))
#doc.add_item(Item('Item', 'Item desc', 2, '2.2'))
doc.add_item(Item('Item', 'Item desc', 3, '3.3'))

# Tax rate, optional
doc.set_item_tax_rate(20)  # 20%

# Transactions detail, optional
doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
doc.add_transaction(Transaction('Strip', 222, date.today(), 2))

# Optional
예제 #16
0
def generate_invoice(token):
    language = get_language()
    invoice_name = 'invoice-' + language + '-' + str(token) + '.pdf'
    invoice_path = os.path.join(SENDFILE_ROOT, 'invoices', invoice_name)
    international_pyinvoice = {
        INVOICE_ID: _('Invoice id'),
        INVOICE_DATETIME: _('Invoice date'),
        INVOICE: _('Invoice'),
        DUE_DATE: _('Invoice due date'),
        NAME: _('Name'),
        STREET: _('Street'),
        CITY: _('City'),
        STATE: _('State'),
        COUNTRY: _('Country'),
        POST_CODE: _('Postal code'),
        VAT_TAX_NUMBER: _('Vat/Tax number'),
        MERCHANT: _('Merchant'),
        EMAIL: _('Email'),
        CLIENT_ID: _('Client id'),
        CLIENT: _('Client'),
        DETAIL: _('Detail'),
        DESCRIPTION: _('Description'),
        UNITS: _('Units'),
        UNIT_PRICE: _('Unit Price'),
        AMOUNT: _('Amount'),
        SUBTOTAL: _('Subtotal'),
        TAX: _('Vat/Tax'),
        TOTAL: _('Total'),
        TRANSACTION_ID: _('Transaction id'),
        GATEWAY: _('Gateway'),
        TRANSACTION_DATE: _('Transaction date'),
        TRANSACTION: _('Transaction'),
        PAID: _('PAID'),
        PROVIDER_ID: _('SIRET'),
        CAPITAL: _('Capital'),
        INVOICE_STATUS: _('Payment status')
    }
    doc = SimpleInvoice(invoice_path, constants=international_pyinvoice)
    # get the order and payment
    order = Order.objects.get(token=token)
    #payment = order.get_payment()
    payment = order.payment
    # set the invoice related data
    # if payment.status == 'confirmed' or payment.status == 'refunded':
    #     doc.is_paid = True
    doc.invoice_info = InvoiceInfo(payment.invoice_date.strftime("%Y/%m-") +
                                   str(payment.invoice_nb),
                                   payment.invoice_date.strftime("%Y/%m/%d"),
                                   invoice_status=payment.get_status_display())
    # set provider data
    doc.service_provider_info = eagal_provider
    # set the client related data
    client_address = order.billing_address
    doc.client_info = ClientInfo(email=order.user.email,
                                 name=client_address.billing_name,
                                 street=client_address.street_address_1 +
                                 client_address.street_address_2,
                                 city=client_address.city,
                                 post_code=client_address.postal_code,
                                 state=client_address.country_area,
                                 country=client_address.country,
                                 client_id=order.user.pk)
    # set product related data
    item = order.item
    price = order.price
    doc.add_item(Item(item.name, str(item), 1, price.net, price.currency))
    doc.set_item_tax_rate(price.tax_percent)
    # translation to do
    doc.set_bottom_tip(
        _("Email: %(email)s <br/>Please contact us if you have any questions.")
        % {'email': '*****@*****.**'})

    doc.finish()
    return doc, invoice_path
예제 #17
0
def main(invoiceItemsDct=invoiceItemsDct,
         calendar=calendar,
         eventType=eventType,
         project=project,
         client_email=client_email,
         client_name=client_name,
         client_street=client_street,
         client_city=client_city,
         client_state=client_state,
         client_country=client_country,
         client_post_code=client_post_code,
         provider_email=provider_email,
         provider_name=provider_name,
         provider_street=provider_street,
         provider_city=provider_city,
         provider_state=provider_state,
         provider_country=provider_country,
         provider_post_code=provider_post_code,
         provider_tax_rate=provider_tax_rate,
         billing_rate=billing_rate,
         invoice_due_date=invoice_due_date,
         invoice_id=invoice_id,
         paid_status=False):
    """  """

    doc = SimpleInvoice('invoice.pdf')

    # Paid stamp, optional
    doc.is_paid = paid_status

    # Invoice info, optional
    doc.invoice_info = InvoiceInfo(
        invoice_id, datetime.now(),
        datetime.now() + timedelta(days=invoice_due_date))

    # Service Provider Info, optional
    doc.service_provider_info = ServiceProviderInfo(
        name=provider_name,
        street=provider_street,
        city=provider_city,
        state=provider_state,
        country=provider_country,
        post_code=provider_post_code,
        # vat_tax_number=vat_tax_number
    )

    # Client info, optional
    doc.client_info = ClientInfo(
        email=client_email
        # name=client_name,
        # street=client_street,
        # city=client_city,
        # state=client_state,
        # country=client_country,
        # post_code=client_post_code,
    )

    # Add Item
    for key1, value1 in invoiceItemsDct.items():
        for key2, value2 in value1.items():
            doc.add_item(
                Item(key1, value2['description'], value2['duration'],
                     billing_rate))

    # Tax rate, optional
    doc.set_item_tax_rate(provider_tax_rate)  # 20%

    # Transactions detail, optional
    ''' doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
    doc.add_transaction(Transaction('Stripe', 222, date.today(), 2)) '''

    # Optional
    doc.set_bottom_tip(
        "Email: " + provider_email +
        "<br />Don't hesitate to contact   us for any questions.")

    doc.finish()
예제 #18
0
doc = SimpleInvoice('invoice.pdf')

c1 = PhysicalCustomer.objects.all()[:1]
e1 = AddEmployee.objects.all()[:1]
s1 = Service.objects.all()[:1]
# Paid stamp, optional
doc.is_paid = True
#PhysicalCustomer s = new PhysicalCustomer();
doc.invoice_info = InvoiceInfo(1023, datetime.now(),
                               datetime.now())  # Invoice info, optional

# Service Provider Info, optional
doc.service_provider_info = ServiceProviderInfo(name=s1[0].description)

# Client info, optional
doc.client_info = ClientInfo(
    name=c1[0].Cust_name,
    email=c1[0].Cust_email,
)

# Add Item
doc.add_item(Item('Service', 'Service_id', s1[0].Serv_id, '1.1'))

# Tax rate, optional
doc.set_item_tax_rate(20)  # 20%

# Transactions detail, optional
doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1))
doc.add_transaction(Transaction('Stripe', 222, date.today(), 2))

doc.finish()
    def generateInvoice(self):
        print(self.invoiceService)
        print(self.servicePrice)
        if str(self.invoiceService).find(","):
            servicesSplittedList = self.invoiceService.split(",")
            print(servicesSplittedList)
        else:
            servicesSplittedList = [self.invoiceService]

        if str(self.servicePrice).find(","):
            pricesSplittedList = str(self.servicePrice).split(",")
            print(pricesSplittedList)
        else:
            pricesSplittedList = [str(self.invoiceService)]

        doc = SimpleInvoice(self.invoiceName + ".pdf")
        #Paid stamp
        doc.is_paid = False

        doc.invoice_info = InvoiceInfo(self.invoiceNumber, self.invoiceDate,
                                       self.invoiceExpiringDate)

        #Service provider
        doc.service_provider_info = ServiceProviderInfo(
            name="R&M Tech",
            street="My street",
            city="My City",
            state="My State",
            country="Costa Rica",
            post_code="22222222",
            vat_tax_number="Vat/Tax number")

        #client info
        doc.client_info = ClientInfo(name=self.invoiceName,
                                     client_id=self.invoiceID,
                                     email=self.invoiceEmail,
                                     street=self.invoiceAddress)

        #add item
        for i in range(0, len(servicesSplittedList)):
            doc.add_item(
                Item(servicesSplittedList[i], "", 1,
                     str(pricesSplittedList[i])))

        #tax rate
        doc.set_item_tax_rate(0)

        payments = [
            "PayPal", "MasterCard", "Visa", "Google Pay", "Apple Pay", "Cash",
            "Cash", "Cash", "Cash"
        ]

        #transactions detail
        doc.add_transaction(
            Transaction(random.choice(payments), self.invoiceID,
                        self.invoiceDate, 1))

        #Optional
        doc.set_bottom_tip(
            "Email: [email protected]<br />Don't hesitate to contact us for any questions."
        )

        doc.finish()
        print("PDF Done")