bidankita invoice print example

mail@pastecode.io avatar
unknown
javascript
2 years ago
9.7 kB
1
Indexable
Never
async function printInvoice(data){
    await BluetoothEscposPrinter.printerInit();
    await BluetoothEscposPrinter.printerLeftSpace(0);
    await BluetoothEscposPrinter.printerLineSpace(0);
    await BluetoothEscposPrinter.printerUnderLine(0);
    await BluetoothEscposPrinter.setBlob(0);
    
    let base64logo = "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"
    await BluetoothEscposPrinter.printPic(base64logo, {width: 300, left: 25});
    await BluetoothEscposPrinter.printText('\n\r', {});
    
    await BluetoothEscposPrinter.printerAlign(
        BluetoothEscposPrinter.ALIGN.CENTER,
    );
    
    await BluetoothEscposPrinter.printText('Jl. Piere Tendean No. 20,\n\r', {});
    await BluetoothEscposPrinter.printText('Sidowayah, Klaten, Jawa Tengah\n\r', {});

    await BluetoothEscposPrinter.printText('\n\r', {});
    await BluetoothEscposPrinter.printerAlign(
        BluetoothEscposPrinter.ALIGN.LEFT,
    );
    
    await BluetoothEscposPrinter.printText(moment(data.so_complete_datetime).format('dddd, DD MMMM YYYY H:mm:ss') + '\n\r', {});
    await BluetoothEscposPrinter.printText('Kasir: ' + data.so_complete_admin_name + '\n\r', {});
    await BluetoothEscposPrinter.printText('No Invoice: ' + data.so_number + '\n\r', {}, );
    await BluetoothEscposPrinter.printText('No Trans.: ' + data.so_trans_number + '\n\r', {}, );
    await BluetoothEscposPrinter.printText('Pelanggan: ' + data.so_customer_name + '\n\r', {}, );
    if(data.so_is_wa !== undefined && data.so_is_wa === 'Y') {
        await BluetoothEscposPrinter.printText('Pembelian: Via WhatsApp\n\r', {}, );
    }
    await BluetoothEscposPrinter.printText('--------------------------------\n\r',{},);

    let columnWidthsProduct = [10, 11, 11];
    let columnAlignsProduct = [BluetoothEscposPrinter.ALIGN.LEFT, BluetoothEscposPrinter.ALIGN.RIGHT, BluetoothEscposPrinter.ALIGN.RIGHT]
    
    for(let i = 0 ; i < data.so_detail.length; i++){
        let qty = data.so_detail[i].so_detail_product_qty
        let discount = MyHelpers.formatNumber(data.so_detail[i].so_detail_product_discount_value);
        let price = MyHelpers.formatNumber(data.so_detail[i].so_detail_product_unit_selling_price);
        let subTotalBeforeDisc = MyHelpers.formatNumber(data.so_detail[i].so_detail_product_unit_selling_price * qty);
        let priceNett = data.so_detail[i].so_detail_product_unit_selling_price - data.so_detail[i].so_detail_product_discount_value
        let subTotal = MyHelpers.formatNumber(priceNett * qty)
        await BluetoothEscposPrinter.printText(data.so_detail[i].so_detail_product_name + '\n\r', {}, );
        await BluetoothEscposPrinter.printColumn( columnWidthsProduct, columnAlignsProduct,
            [`${MyHelpers.formatNumber(qty)} ${data.so_detail[i].so_detail_product_unit}`, `@${price}`, `${subTotalBeforeDisc}`], {},
        );
        if(data.so_detail[i].so_detail_product_discount_value > 0){
            await BluetoothEscposPrinter.printColumn( columnWidthsProduct, columnAlignsProduct,[``, `Diskon`, `(${discount})`], {});
        }
    }
    
    await BluetoothEscposPrinter.printText('--------------------------------\n\r', {}, );

    let columnWidthsTotal = [17, 15]
    let columnAlignsTotal = [BluetoothEscposPrinter.ALIGN.RIGHT, BluetoothEscposPrinter.ALIGN.RIGHT]
    await BluetoothEscposPrinter.printColumn( columnWidthsTotal, columnAlignsTotal,
        [`Sub Total:`, `${MyHelpers.formatNumber(data.so_total_product_price, 'idr')}`], {},
    );
    
    await BluetoothEscposPrinter.printColumn(columnWidthsTotal, columnAlignsTotal,
        [`Diskon (${data.so_total_discount_percent}%):`, `${MyHelpers.formatNumber(data.so_total_discount_value, 'idr')}`], {},
    );

    await BluetoothEscposPrinter.printText('\n\r', {});
    await BluetoothEscposPrinter.printColumn(columnWidthsTotal, columnAlignsTotal,
        [`Total:`, `${MyHelpers.formatNumber(data.so_grand_total, 'idr')}`], {},
    );

    await BluetoothEscposPrinter.printText('--------------------------------\n\r', {}, );

    if (data.so_payment_method == 'cash') {
        await BluetoothEscposPrinter.printText('\n\r', {});
        await BluetoothEscposPrinter.printColumn(columnWidthsTotal, columnAlignsTotal,
            [`Tunai:`, `${MyHelpers.formatNumber(data.so_grand_total, 'idr')}`], {},
        );
        await BluetoothEscposPrinter.printColumn(columnWidthsTotal, columnAlignsTotal,
            [`Kembalian:`, `${MyHelpers.formatNumber("0", 'idr')}`], {},
        );
        await BluetoothEscposPrinter.printText('--------------------------------\n\r', {}, );
    }else{
        if(data.so_payment_method == 'transfer') {
            await BluetoothEscposPrinter.printerAlign(
                BluetoothEscposPrinter.ALIGN.LEFT,
            );
            await BluetoothEscposPrinter.printText('\n\r', {});
            await BluetoothEscposPrinter.printText('Transfer Bank\n\r', {});
            await BluetoothEscposPrinter.printText('Dari Bank: ' + data.so_transfer_bank_from_name + '\n\r', {});
            await BluetoothEscposPrinter.printText('Ke Bank: ' + data.so_transfer_bank_to_name + '\n\r', {});
            await BluetoothEscposPrinter.printText('--------------------------------\n\r', {}, );
        } else {
            await BluetoothEscposPrinter.printerAlign(
                BluetoothEscposPrinter.ALIGN.LEFT,
            );
            await BluetoothEscposPrinter.printText('\n\r', {});
            await BluetoothEscposPrinter.printText('Bank: ' + data.so_edc_bank_name + '\n\r', {});
            await BluetoothEscposPrinter.printText('Card: ' + data.so_card_number + '\n\r', {});
            await BluetoothEscposPrinter.printText('--------------------------------\n\r', {}, );
        }
    }

    await BluetoothEscposPrinter.printerAlign(
        BluetoothEscposPrinter.ALIGN.CENTER,
    );
    await BluetoothEscposPrinter.printText('Bidan Kita\n\r', {});
    await BluetoothEscposPrinter.printText('(www.bidankita.com)\n\r', {});
    await BluetoothEscposPrinter.printText('\n\r\n\r\n\r\n\r', {});
}