In this post we are going to discuss Invoice or Billing Management System by using PHP Script with Jquery. For make Simple Invoice we have use not only PHP JQuery but also we have use Bootstrap Framework and Mysql database also. In this system we will not create Invoice or Billing for one item but here we will make system that will create multiple dynamic item Invoice. This is simple script and this script any one can use for his project or learning purpose like how to developed Invoice System by using Open Source PHP and Jquery with Mysql and Bootstrap. From this post you can gain knowledge to make Simple Billing System in PHP.
This is the time digitization, all type of transaction has been done online, so for here we have make online Invoice system using PHP. By using this script you can make invoice online. In this tutorial you add some other functionality like after making of invoice you can email this invoice to particular person also. In short you can generate digital invoice from this script. After making of invoice you can also convert that invoice into PDF format also. Here we have also discuss how to convert digital invoice into PDF format, so we can also get hard copy of Invoice also. By using this script you can generate invoice by filing simple form in which we have use JQuery for add multiple item.
In this system We can generate new invoice, we can edit or update invoice details, we can delete or remove invoice and lastly we can also generate PDF file from that invoice also and after this we can get print from PDF file also. This way we can generate unlimited invoices from this system. In this system we can add multiple item in single invoice by using Jquery and this form we can also add tax details also and this all calculation has been done by using Jquery. Suppose you want to remove any product from invoice then you can also remove product from Invoice also. In this system all calculation has been done by using JQuery code, so by using this JQuery we can make dynamic product invoice form. And lastly in this system you can also get the details of previously generated invoice also.
This is the time digitization, all type of transaction has been done online, so for here we have make online Invoice system using PHP. By using this script you can make invoice online. In this tutorial you add some other functionality like after making of invoice you can email this invoice to particular person also. In short you can generate digital invoice from this script. After making of invoice you can also convert that invoice into PDF format also. Here we have also discuss how to convert digital invoice into PDF format, so we can also get hard copy of Invoice also. By using this script you can generate invoice by filing simple form in which we have use JQuery for add multiple item.
In this system We can generate new invoice, we can edit or update invoice details, we can delete or remove invoice and lastly we can also generate PDF file from that invoice also and after this we can get print from PDF file also. This way we can generate unlimited invoices from this system. In this system we can add multiple item in single invoice by using Jquery and this form we can also add tax details also and this all calculation has been done by using Jquery. Suppose you want to remove any product from invoice then you can also remove product from Invoice also. In this system all calculation has been done by using JQuery code, so by using this JQuery we can make dynamic product invoice form. And lastly in this system you can also get the details of previously generated invoice also.
Source Code
database_connection.php
<?php
//database_connection.php
$connect = new PDO('mysql:host=localhost;dbname=testing4', 'root', '');
?>
invoice.php
<?php
//invoice.php
include('database_connection.php');
$statement = $connect->prepare("
SELECT * FROM tbl_order
ORDER BY order_id DESC
");
$statement->execute();
$all_result = $statement->fetchAll();
$total_rows = $statement->rowCount();
if(isset($_POST["create_invoice"]))
{
$order_total_before_tax = 0;
$order_total_tax1 = 0;
$order_total_tax2 = 0;
$order_total_tax3 = 0;
$order_total_tax = 0;
$order_total_after_tax = 0;
$statement = $connect->prepare("
INSERT INTO tbl_order
(order_no, order_date, order_receiver_name, order_receiver_address, order_total_before_tax, order_total_tax1, order_total_tax2, order_total_tax3, order_total_tax, order_total_after_tax, order_datetime)
VALUES (:order_no, :order_date, :order_receiver_name, :order_receiver_address, :order_total_before_tax, :order_total_tax1, :order_total_tax2, :order_total_tax3, :order_total_tax, :order_total_after_tax, :order_datetime)
");
$statement->execute(
array(
':order_no' => trim($_POST["order_no"]),
':order_date' => trim($_POST["order_date"]),
':order_receiver_name' => trim($_POST["order_receiver_name"]),
':order_receiver_address' => trim($_POST["order_receiver_address"]),
':order_total_before_tax' => $order_total_before_tax,
':order_total_tax1' => $order_total_tax1,
':order_total_tax2' => $order_total_tax2,
':order_total_tax3' => $order_total_tax3,
':order_total_tax' => $order_total_tax,
':order_total_after_tax' => $order_total_after_tax,
':order_datetime' => date("Y-m-d")
)
);
$statement = $connect->query("SELECT LAST_INSERT_ID()");
$order_id = $statement->fetchColumn();
for($count=0; $count<$_POST["total_item"]; $count++)
{
$order_total_before_tax = $order_total_before_tax + floatval(trim($_POST["order_item_actual_amount"][$count]));
$order_total_tax1 = $order_total_tax1 + floatval(trim($_POST["order_item_tax1_amount"][$count]));
$order_total_tax2 = $order_total_tax2 + floatval(trim($_POST["order_item_tax2_amount"][$count]));
$order_total_tax3 = $order_total_tax3 + floatval(trim($_POST["order_item_tax3_amount"][$count]));
$order_total_after_tax = $order_total_after_tax + floatval(trim($_POST["order_item_final_amount"][$count]));
$statement = $connect->prepare("
INSERT INTO tbl_order_item
(order_id, item_name, order_item_quantity, order_item_price, order_item_actual_amount, order_item_tax1_rate, order_item_tax1_amount, order_item_tax2_rate, order_item_tax2_amount, order_item_tax3_rate, order_item_tax3_amount, order_item_final_amount)
VALUES (:order_id, :item_name, :order_item_quantity, :order_item_price, :order_item_actual_amount, :order_item_tax1_rate, :order_item_tax1_amount, :order_item_tax2_rate, :order_item_tax2_amount, :order_item_tax3_rate, :order_item_tax3_amount, :order_item_final_amount)
");
$statement->execute(
array(
':order_id' => $order_id,
':item_name' => trim($_POST["item_name"][$count]),
':order_item_quantity' => trim($_POST["order_item_quantity"][$count]),
':order_item_price' => trim($_POST["order_item_price"][$count]),
':order_item_actual_amount' => trim($_POST["order_item_actual_amount"][$count]),
':order_item_tax1_rate' => trim($_POST["order_item_tax1_rate"][$count]),
':order_item_tax1_amount' => trim($_POST["order_item_tax1_amount"][$count]),
':order_item_tax2_rate' => trim($_POST["order_item_tax2_rate"][$count]),
':order_item_tax2_amount' => trim($_POST["order_item_tax2_amount"][$count]),
':order_item_tax3_rate' => trim($_POST["order_item_tax3_rate"][$count]),
':order_item_tax3_amount' => trim($_POST["order_item_tax3_amount"][$count]),
':order_item_final_amount' => trim($_POST["order_item_final_amount"][$count])
)
);
}
$order_total_tax = $order_total_tax1 + $order_total_tax2 + $order_total_tax3;
$statement = $connect->prepare("
UPDATE tbl_order
SET order_total_before_tax = :order_total_before_tax,
order_total_tax1 = :order_total_tax1,
order_total_tax2 = :order_total_tax2,
order_total_tax3 = :order_total_tax3,
order_total_tax = :order_total_tax,
order_total_after_tax = :order_total_after_tax
WHERE order_id = :order_id
");
$statement->execute(
array(
':order_total_before_tax' => $order_total_before_tax,
':order_total_tax1' => $order_total_tax1,
':order_total_tax2' => $order_total_tax2,
':order_total_tax3' => $order_total_tax3,
':order_total_tax' => $order_total_tax,
':order_total_after_tax' => $order_total_after_tax,
':order_id' => $order_id
)
);
header("location:invoice.php");
}
if(isset($_POST["update_invoice"]))
{
$order_total_before_tax = 0;
$order_total_tax1 = 0;
$order_total_tax2 = 0;
$order_total_tax3 = 0;
$order_total_tax = 0;
$order_total_after_tax = 0;
$order_id = $_POST["order_id"];
$statement = $connect->prepare("
DELETE FROM tbl_order_item WHERE order_id = :order_id
");
$statement->execute(
array(
':order_id' => $order_id
)
);
for($count=0; $count<$_POST["total_item"]; $count++)
{
$order_total_before_tax = $order_total_before_tax + floatval(trim($_POST["order_item_actual_amount"][$count]));
$order_total_tax1 = $order_total_tax1 + floatval(trim($_POST["order_item_tax1_amount"][$count]));
$order_total_tax2 = $order_total_tax2 + floatval(trim($_POST["order_item_tax2_amount"][$count]));
$order_total_tax3 = $order_total_tax3 + floatval(trim($_POST["order_item_tax3_amount"][$count]));
$order_total_after_tax = $order_total_after_tax + floatval(trim($_POST["order_item_final_amount"][$count]));
$statement = $connect->prepare("
INSERT INTO tbl_order_item
(order_id, item_name, order_item_quantity, order_item_price, order_item_actual_amount, order_item_tax1_rate, order_item_tax1_amount, order_item_tax2_rate, order_item_tax2_amount, order_item_tax3_rate, order_item_tax3_amount, order_item_final_amount)
VALUES (:order_id, :item_name, :order_item_quantity, :order_item_price, :order_item_actual_amount, :order_item_tax1_rate, :order_item_tax1_amount, :order_item_tax2_rate, :order_item_tax2_amount, :order_item_tax3_rate, :order_item_tax3_amount, :order_item_final_amount)
");
$statement->execute(
array(
':order_id' => $order_id,
':item_name' => trim($_POST["item_name"][$count]),
':order_item_quantity' => trim($_POST["order_item_quantity"][$count]),
':order_item_price' => trim($_POST["order_item_price"][$count]),
':order_item_actual_amount' => trim($_POST["order_item_actual_amount"][$count]),
':order_item_tax1_rate' => trim($_POST["order_item_tax1_rate"][$count]),
':order_item_tax1_amount' => trim($_POST["order_item_tax1_amount"][$count]),
':order_item_tax2_rate' => trim($_POST["order_item_tax2_rate"][$count]),
':order_item_tax2_amount' => trim($_POST["order_item_tax2_amount"][$count]),
':order_item_tax3_rate' => trim($_POST["order_item_tax3_rate"][$count]),
':order_item_tax3_amount' => trim($_POST["order_item_tax3_amount"][$count]),
':order_item_final_amount' => trim($_POST["order_item_final_amount"][$count])
)
);
$result = $statement->fetchAll();
}
$order_total_tax = $order_total_tax1 + $order_total_tax2 + $order_total_tax3;
$statement = $connect->prepare("
UPDATE tbl_order
SET order_no = :order_no,
order_date = :order_date,
order_receiver_name = :order_receiver_name,
order_receiver_address = :order_receiver_address,
order_total_before_tax = :order_total_before_tax,
order_total_tax1 = :order_total_tax1,
order_total_tax2 = :order_total_tax2,
order_total_tax3 = :order_total_tax3,
order_total_tax = :order_total_tax,
order_total_after_tax = :order_total_after_tax
WHERE order_id = :order_id
");
$statement->execute(
array(
':order_no' => trim($_POST["order_no"]),
':order_date' => trim($_POST["order_date"]),
':order_receiver_name' => trim($_POST["order_receiver_name"]),
':order_receiver_address' => trim($_POST["order_receiver_address"]),
':order_total_before_tax' => $order_total_before_tax,
':order_total_tax1' => $order_total_tax1,
':order_total_tax2' => $order_total_tax2,
':order_total_tax3' => $order_total_tax3,
':order_total_tax' => $order_total_tax,
':order_total_after_tax' => $order_total_after_tax,
':order_id' => $order_id
)
);
$result = $statement->fetchAll();
header("location:invoice.php");
}
if(isset($_GET["delete"]) && isset($_GET["id"]))
{
$statement = $connect->prepare("DELETE FROM tbl_order WHERE order_id = :id");
$statement->execute(
array(
':id' => $_GET["id"]
)
);
$statement = $connect->prepare(
"DELETE FROM tbl_order_item WHERE order_id = :id");
$statement->execute(
array(
':id' => $_GET["id"]
)
);
header("location:invoice.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" href="css/bootstrap.min.css">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.dataTables.min.js"></script>
<script src="js/dataTables.bootstrap.min.js"></script>
<link rel="stylesheet" href="css/dataTables.bootstrap.min.css">
<style>
/* Remove the navbar's default margin-bottom and rounded borders */
.navbar {
margin-bottom: 4px;
border-radius: 0;
}
/* Add a gray background color and some padding to the footer */
footer {
background-color: #f2f2f2;
padding: 25px;
}
.carousel-inner img {
width: 100%; /* Set width to 100% */
margin: auto;
min-height:200px;
}
.navbar-brand
{
padding:5px 40px;
}
.navbar-brand:hover
{
background-color:#ffffff;
}
/* Hide the carousel text when the screen is less than 600 pixels wide */
@media (max-width: 600px) {
.carousel-caption {
display: none;
}
}
</style>
</head>
<body>
<style>
.box
{
width: 100%;
max-width: 1390px;
border-radius: 5px;
border:1px solid #ccc;
padding: 15px;
margin: 0 auto;
margin-top:50px;
box-sizing:border-box;
}
</style>
<link rel="stylesheet" href="css/datepicker.css">
<script src="js/bootstrap-datepicker1.js"></script>
<script>
$(document).ready(function(){
$('#order_date').datepicker({
format: "yyyy-mm-dd",
autoclose: true
});
});
</script>
<div class="container-fluid">
<?php
if(isset($_GET["add"]))
{
?>
<form method="post" id="invoice_form">
<div class="table-responsive">
<table class="table table-bordered">
<tr>
<td colspan="2" align="center"><h2 style="margin-top:10.5px">Create Invoice</h2></td>
</tr>
<tr>
<td colspan="2">
<div class="row">
<div class="col-md-8">
To,<br />
<b>RECEIVER (BILL TO)</b><br />
<input type="text" name="order_receiver_name" id="order_receiver_name" class="form-control input-sm" placeholder="Enter Receiver Name" />
<textarea name="order_receiver_address" id="order_receiver_address" class="form-control" placeholder="Enter Billing Address"></textarea>
</div>
<div class="col-md-4">
Reverse Charge<br />
<input type="text" name="order_no" id="order_no" class="form-control input-sm" placeholder="Enter Invoice No." />
<input type="text" name="order_date" id="order_date" class="form-control input-sm" readonly placeholder="Select Invoice Date" />
</div>
</div>
<br />
<table id="invoice-item-table" class="table table-bordered">
<tr>
<th width="7%">Sr No.</th>
<th width="20%">Item Name</th>
<th width="5%">Quantity</th>
<th width="5%">Price</th>
<th width="10%">Actual Amt.</th>
<th width="12.5%" colspan="2">Tax1 (%)</th>
<th width="12.5%" colspan="2">Tax2 (%)</th>
<th width="12.5%" colspan="2">Tax3 (%)</th>
<th width="12.5%" rowspan="2">Total</th>
<th width="3%" rowspan="2"></th>
</tr>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
</tr>
<tr>
<td><span id="sr_no">1</span></td>
<td><input type="text" name="item_name[]" id="item_name1" class="form-control input-sm" /></td>
<td><input type="text" name="order_item_quantity[]" id="order_item_quantity1" data-srno="1" class="form-control input-sm order_item_quantity" /></td>
<td><input type="text" name="order_item_price[]" id="order_item_price1" data-srno="1" class="form-control input-sm number_only order_item_price" /></td>
<td><input type="text" name="order_item_actual_amount[]" id="order_item_actual_amount1" data-srno="1" class="form-control input-sm order_item_actual_amount" readonly /></td>
<td><input type="text" name="order_item_tax1_rate[]" id="order_item_tax1_rate1" data-srno="1" class="form-control input-sm number_only order_item_tax1_rate" /></td>
<td><input type="text" name="order_item_tax1_amount[]" id="order_item_tax1_amount1" data-srno="1" readonly class="form-control input-sm order_item_tax1_amount" /></td>
<td><input type="text" name="order_item_tax2_rate[]" id="order_item_tax2_rate1" data-srno="1" class="form-control input-sm number_only order_item_tax2_rate" /></td>
<td><input type="text" name="order_item_tax2_amount[]" id="order_item_tax2_amount1" data-srno="1" readonly class="form-control input-sm order_item_tax2_amount" /></td>
<td><input type="text" name="order_item_tax3_rate[]" id="order_item_tax3_rate1" data-srno="1" class="form-control input-sm number_only order_item_tax3_rate" /></td>
<td><input type="text" name="order_item_tax3_amount[]" id="order_item_tax3_amount1" data-srno="1" readonly class="form-control input-sm order_item_tax3_amount" /></td>
<td><input type="text" name="order_item_final_amount[]" id="order_item_final_amount1" data-srno="1" readonly class="form-control input-sm order_item_final_amount" /></td>
<td></td>
</tr>
</table>
<div align="right">
<button type="button" name="add_row" id="add_row" class="btn btn-success btn-xs">+</button>
</div>
</td>
</tr>
<tr>
<td align="right"><b>Total</td>
<td align="right"><b><span id="final_total_amt"></span></b></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="hidden" name="total_item" id="total_item" value="1" />
<input type="submit" name="create_invoice" id="create_invoice" class="btn btn-info" value="Create" />
</td>
</tr>
</table>
</div>
</form>
<script>
$(document).ready(function(){
var final_total_amt = $('#final_total_amt').text();
var count = 1;
$(document).on('click', '#add_row', function(){
count++;
$('#total_item').val(count);
var html_code = '';
html_code += '<tr id="row_id_'+count+'">';
html_code += '<td><span id="sr_no">'+count+'</span></td>';
html_code += '<td><input type="text" name="item_name[]" id="item_name'+count+'" class="form-control input-sm" /></td>';
html_code += '<td><input type="text" name="order_item_quantity[]" id="order_item_quantity'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_quantity" /></td>';
html_code += '<td><input type="text" name="order_item_price[]" id="order_item_price'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_price" /></td>';
html_code += '<td><input type="text" name="order_item_actual_amount[]" id="order_item_actual_amount'+count+'" data-srno="'+count+'" class="form-control input-sm order_item_actual_amount" readonly /></td>';
html_code += '<td><input type="text" name="order_item_tax1_rate[]" id="order_item_tax1_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax1_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax1_amount[]" id="order_item_tax1_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax1_amount" /></td>';
html_code += '<td><input type="text" name="order_item_tax2_rate[]" id="order_item_tax2_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax2_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax2_amount[]" id="order_item_tax2_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax2_amount" /></td>';
html_code += '<td><input type="text" name="order_item_tax3_rate[]" id="order_item_tax3_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax3_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax3_amount[]" id="order_item_tax3_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax3_amount" /></td>';
html_code += '<td><input type="text" name="order_item_final_amount[]" id="order_item_final_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_final_amount" /></td>';
html_code += '<td><button type="button" name="remove_row" id="'+count+'" class="btn btn-danger btn-xs remove_row">X</button></td>';
html_code += '</tr>';
$('#invoice-item-table').append(html_code);
});
$(document).on('click', '.remove_row', function(){
var row_id = $(this).attr("id");
var total_item_amount = $('#order_item_final_amount'+row_id).val();
var final_amount = $('#final_total_amt').text();
var result_amount = parseFloat(final_amount) - parseFloat(total_item_amount);
$('#final_total_amt').text(result_amount);
$('#row_id_'+row_id).remove();
count--;
$('#total_item').val(count);
});
function cal_final_total(count)
{
var final_item_total = 0;
for(j=1; j<=count; j++)
{
var quantity = 0;
var price = 0;
var actual_amount = 0;
var tax1_rate = 0;
var tax1_amount = 0;
var tax2_rate = 0;
var tax2_amount = 0;
var tax3_rate = 0;
var tax3_amount = 0;
var item_total = 0;
quantity = $('#order_item_quantity'+j).val();
if(quantity > 0)
{
price = $('#order_item_price'+j).val();
if(price > 0)
{
actual_amount = parseFloat(quantity) * parseFloat(price);
$('#order_item_actual_amount'+j).val(actual_amount);
tax1_rate = $('#order_item_tax1_rate'+j).val();
if(tax1_rate > 0)
{
tax1_amount = parseFloat(actual_amount)*parseFloat(tax1_rate)/100;
$('#order_item_tax1_amount'+j).val(tax1_amount);
}
tax2_rate = $('#order_item_tax2_rate'+j).val();
if(tax2_rate > 0)
{
tax2_amount = parseFloat(actual_amount)*parseFloat(tax2_rate)/100;
$('#order_item_tax2_amount'+j).val(tax2_amount);
}
tax3_rate = $('#order_item_tax3_rate'+j).val();
if(tax3_rate > 0)
{
tax3_amount = parseFloat(actual_amount)*parseFloat(tax3_rate)/100;
$('#order_item_tax3_amount'+j).val(tax3_amount);
}
item_total = parseFloat(actual_amount) + parseFloat(tax1_amount) + parseFloat(tax2_amount) + parseFloat(tax3_amount);
final_item_total = parseFloat(final_item_total) + parseFloat(item_total);
$('#order_item_final_amount'+j).val(item_total);
}
}
}
$('#final_total_amt').text(final_item_total);
}
$(document).on('blur', '.order_item_price', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax1_rate', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax2_rate', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax3_rate', function(){
cal_final_total(count);
});
$('#create_invoice').click(function(){
if($.trim($('#order_receiver_name').val()).length == 0)
{
alert("Please Enter Reciever Name");
return false;
}
if($.trim($('#order_no').val()).length == 0)
{
alert("Please Enter Invoice Number");
return false;
}
if($.trim($('#order_date').val()).length == 0)
{
alert("Please Select Invoice Date");
return false;
}
for(var no=1; no<=count; no++)
{
if($.trim($('#item_name'+no).val()).length == 0)
{
alert("Please Enter Item Name");
$('#item_name'+no).focus();
return false;
}
if($.trim($('#order_item_quantity'+no).val()).length == 0)
{
alert("Please Enter Quantity");
$('#order_item_quantity'+no).focus();
return false;
}
if($.trim($('#order_item_price'+no).val()).length == 0)
{
alert("Please Enter Price");
$('#order_item_price'+no).focus();
return false;
}
}
$('#invoice_form').submit();
});
});
</script>
<?php
}
elseif(isset($_GET["update"]) && isset($_GET["id"]))
{
$statement = $connect->prepare("
SELECT * FROM tbl_order
WHERE order_id = :order_id
LIMIT 1
");
$statement->execute(
array(
':order_id' => $_GET["id"]
)
);
$result = $statement->fetchAll();
foreach($result as $row)
{
?>
<script>
$(document).ready(function(){
$('#order_no').val("<?php echo $row["order_no"]; ?>");
$('#order_date').val("<?php echo $row["order_date"]; ?>");
$('#order_receiver_name').val("<?php echo $row["order_receiver_name"]; ?>");
$('#order_receiver_address').val("<?php echo $row["order_receiver_address"]; ?>");
});
</script>
<form method="post" id="invoice_form">
<div class="table-responsive">
<table class="table table-bordered">
<tr>
<td colspan="2" align="center"><h2 style="margin-top:10.5px">Edit Invoice</h2></td>
</tr>
<tr>
<td colspan="2">
<div class="row">
<div class="col-md-8">
To,<br />
<b>RECEIVER (BILL TO)</b><br />
<input type="text" name="order_receiver_name" id="order_receiver_name" class="form-control input-sm" placeholder="Enter Receiver Name" />
<textarea name="order_receiver_address" id="order_receiver_address" class="form-control" placeholder="Enter Billing Address"></textarea>
</div>
<div class="col-md-4">
Reverse Charge<br />
<input type="text" name="order_no" id="order_no" class="form-control input-sm" placeholder="Enter Invoice No." />
<input type="text" name="order_date" id="order_date" class="form-control input-sm" readonly placeholder="Select Invoice Date" />
</div>
</div>
<br />
<table id="invoice-item-table" class="table table-bordered">
<tr>
<th width="7%">Sr No.</th>
<th width="20%">Item Name</th>
<th width="5%">Quantity</th>
<th width="5%">Price</th>
<th width="10%">Actual Amt.</th>
<th width="12.5%" colspan="2">Tax1 (%)</th>
<th width="12.5%" colspan="2">Tax2 (%)</th>
<th width="12.5%" colspan="2">Tax3 (%)</th>
<th width="12.5%" rowspan="2">Total</th>
<th width="3%" rowspan="2"></th>
</tr>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
</tr>
<?php
$statement = $connect->prepare("
SELECT * FROM tbl_order_item
WHERE order_id = :order_id
");
$statement->execute(
array(
':order_id' => $_GET["id"]
)
);
$item_result = $statement->fetchAll();
$m = 0;
foreach($item_result as $sub_row)
{
$m = $m + 1;
?>
<tr>
<td><span id="sr_no"><?php echo $m; ?></span></td>
<td><input type="text" name="item_name[]" id="item_name<?php echo $m; ?>" class="form-control input-sm" value="<?php echo $sub_row["item_name"]; ?>" /></td>
<td><input type="text" name="order_item_quantity[]" id="order_item_quantity<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm order_item_quantity" value = "<?php echo $sub_row["order_item_quantity"]; ?>"/></td>
<td><input type="text" name="order_item_price[]" id="order_item_price<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm number_only order_item_price" value="<?php echo $sub_row["order_item_price"]; ?>" /></td>
<td><input type="text" name="order_item_actual_amount[]" id="order_item_actual_amount<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm order_item_actual_amount" value="<?php echo $sub_row["order_item_actual_amount"];?>" readonly /></td>
<td><input type="text" name="order_item_tax1_rate[]" id="order_item_tax1_rate<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm number_only order_item_tax1_rate" value="<?php echo $sub_row["order_item_tax1_rate"]; ?>" /></td>
<td><input type="text" name="order_item_tax1_amount[]" id="order_item_tax1_amount<?php echo $m; ?>" data-srno="<?php echo $m; ?>" readonly class="form-control input-sm order_item_tax1_amount" value="<?php echo $sub_row["order_item_tax1_amount"];?>" /></td>
<td><input type="text" name="order_item_tax2_rate[]" id="order_item_tax2_rate<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm number_only order_item_tax2_rate" value="<?php echo $sub_row["order_item_tax2_rate"];?>" /></td>
<td><input type="text" name="order_item_tax2_amount[]" id="order_item_tax2_amount<?php echo $m; ?>" data-srno="<?php echo $m; ?>" readonly class="form-control input-sm order_item_tax2_amount" value="<?php echo $sub_row["order_item_tax2_amount"]; ?>" /></td>
<td><input type="text" name="order_item_tax3_rate[]" id="order_item_tax3_rate<?php echo $m; ?>" data-srno="<?php echo $m; ?>" class="form-control input-sm number_only order_item_tax3_rate" value="<?php echo $sub_row["order_item_tax3_rate"]; ?>" /></td>
<td><input type="text" name="order_item_tax3_amount[]" id="order_item_tax3_amount<?php echo $m; ?>" data-srno="<?php echo $m; ?>" readonly class="form-control input-sm order_item_tax3_amount" value="<?php echo $sub_row["order_item_tax3_amount"]; ?>" /></td>
<td><input type="text" name="order_item_final_amount[]" id="order_item_final_amount<?php echo $m; ?>" data-srno="<?php echo $m; ?>" readonly class="form-control input-sm order_item_final_amount" value="<?php echo $sub_row["order_item_final_amount"]; ?>" /></td>
<td></td>
</tr>
<?php
}
?>
</table>
</td>
</tr>
<tr>
<td align="right"><b>Total</td>
<td align="right"><b><span id="final_total_amt"><?php echo $row["order_total_after_tax"]; ?></span></b></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="hidden" name="total_item" id="total_item" value="<?php echo $m; ?>" />
<input type="hidden" name="order_id" id="order_id" value="<?php echo $row["order_id"]; ?>" />
<input type="submit" name="update_invoice" id="create_invoice" class="btn btn-info" value="Edit" />
</td>
</tr>
</table>
</div>
</form>
<script>
$(document).ready(function(){
var final_total_amt = $('#final_total_amt').text();
var count = "<?php echo $m; ?>";
$(document).on('click', '#add_row', function(){
count++;
$('#total_item').val(count);
var html_code = '';
html_code += '<tr id="row_id_'+count+'">';
html_code += '<td><span id="sr_no">'+count+'</span></td>';
html_code += '<td><input type="text" name="item_name[]" id="item_name'+count+'" class="form-control input-sm" /></td>';
html_code += '<td><input type="text" name="order_item_quantity[]" id="order_item_quantity'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_quantity" /></td>';
html_code += '<td><input type="text" name="order_item_price[]" id="order_item_price'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_price" /></td>';
html_code += '<td><input type="text" name="order_item_actual_amount[]" id="order_item_actual_amount'+count+'" data-srno="'+count+'" class="form-control input-sm order_item_actual_amount" readonly /></td>';
html_code += '<td><input type="text" name="order_item_tax1_rate[]" id="order_item_tax1_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax1_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax1_amount[]" id="order_item_tax1_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax1_amount" /></td>';
html_code += '<td><input type="text" name="order_item_tax2_rate[]" id="order_item_tax2_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax2_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax2_amount[]" id="order_item_tax2_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax2_amount" /></td>';
html_code += '<td><input type="text" name="order_item_tax3_rate[]" id="order_item_tax3_rate'+count+'" data-srno="'+count+'" class="form-control input-sm number_only order_item_tax3_rate" /></td>';
html_code += '<td><input type="text" name="order_item_tax3_amount[]" id="order_item_tax3_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_tax3_amount" /></td>';
html_code += '<td><input type="text" name="order_item_final_amount[]" id="order_item_final_amount'+count+'" data-srno="'+count+'" readonly class="form-control input-sm order_item_final_amount" /></td>';
html_code += '<td><button type="button" name="remove_row" id="'+count+'" class="btn btn-danger btn-xs remove_row">X</button></td>';
html_code += '</tr>';
$('#invoice-item-table').append(html_code);
});
$(document).on('click', '.remove_row', function(){
var row_id = $(this).attr("id");
var total_item_amount = $('#order_item_final_amount'+row_id).val();
var final_amount = $('#final_total_amt').text();
var result_amount = parseFloat(final_amount) - parseFloat(total_item_amount);
$('#final_total_amt').text(result_amount);
$('#row_id_'+row_id).remove();
count--;
$('#total_item').val(count);
});
function cal_final_total(count)
{
var final_item_total = 0;
for(j=1; j<=count; j++)
{
var quantity = 0;
var price = 0;
var actual_amount = 0;
var tax1_rate = 0;
var tax1_amount = 0;
var tax2_rate = 0;
var tax2_amount = 0;
var tax3_rate = 0;
var tax3_amount = 0;
var item_total = 0;
quantity = $('#order_item_quantity'+j).val();
if(quantity > 0)
{
price = $('#order_item_price'+j).val();
if(price > 0)
{
actual_amount = parseFloat(quantity) * parseFloat(price);
$('#order_item_actual_amount'+j).val(actual_amount);
tax1_rate = $('#order_item_tax1_rate'+j).val();
if(tax1_rate > 0)
{
tax1_amount = parseFloat(actual_amount)*parseFloat(tax1_rate)/100;
$('#order_item_tax1_amount'+j).val(tax1_amount);
}
tax2_rate = $('#order_item_tax2_rate'+j).val();
if(tax2_rate > 0)
{
tax2_amount = parseFloat(actual_amount)*parseFloat(tax2_rate)/100;
$('#order_item_tax2_amount'+j).val(tax2_amount);
}
tax3_rate = $('#order_item_tax3_rate'+j).val();
if(tax3_rate > 0)
{
tax3_amount = parseFloat(actual_amount)*parseFloat(tax3_rate)/100;
$('#order_item_tax3_amount'+j).val(tax3_amount);
}
item_total = parseFloat(actual_amount) + parseFloat(tax1_amount) + parseFloat(tax2_amount) + parseFloat(tax3_amount);
final_item_total = parseFloat(final_item_total) + parseFloat(item_total);
$('#order_item_final_amount'+j).val(item_total);
}
}
}
$('#final_total_amt').text(final_item_total);
}
$(document).on('blur', '.order_item_price', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax1_rate', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax2_rate', function(){
cal_final_total(count);
});
$(document).on('blur', '.order_item_tax3_rate', function(){
cal_final_total(count);
});
$('#create_invoice').click(function(){
if($.trim($('#order_receiver_name').val()).length == 0)
{
alert("Please Enter Reciever Name");
return false;
}
if($.trim($('#order_no').val()).length == 0)
{
alert("Please Enter Invoice Number");
return false;
}
if($.trim($('#order_date').val()).length == 0)
{
alert("Please Select Invoice Date");
return false;
}
for(var no=1; no<=count; no++)
{
if($.trim($('#item_name'+no).val()).length == 0)
{
alert("Please Enter Item Name");
$('#item_name'+no).focus();
return false;
}
if($.trim($('#order_item_quantity'+no).val()).length == 0)
{
alert("Please Enter Quantity");
$('#order_item_quantity'+no).focus();
return false;
}
if($.trim($('#order_item_price'+no).val()).length == 0)
{
alert("Please Enter Price");
$('#order_item_price'+no).focus();
return false;
}
}
$('#invoice_form').submit();
});
});
</script>
<?php
}
}
else
{
?>
<h3 align="center">Invoice System Using Jquery PHP Mysql and Bootstrap</h3>
<br />
<div align="right">
<a href="invoice.php?add=1" class="btn btn-info btn-xs">Create</a>
</div>
<br />
<table id="data-table" class="table table-bordered table-striped">
<thead>
<tr>
<th>Invoice No.</th>
<th>Invoice Date</th>
<th>Receiver Name</th>
<th>Invoice Total</th>
<th>PDF</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<?php
if($total_rows > 0)
{
foreach($all_result as $row)
{
echo '
<tr>
<td>'.$row["order_no"].'</td>
<td>'.$row["order_date"].'</td>
<td>'.$row["order_receiver_name"].'</td>
<td>'.$row["order_total_after_tax"].'</td>
<td><a href="print_invoice.php?pdf=1&id='.$row["order_id"].'">PDF</a></td>
<td><a href="invoice.php?update=1&id='.$row["order_id"].'"><span class="glyphicon glyphicon-edit"></span></a></td>
<td><a href="#" id="'.$row["order_id"].'" class="delete"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr>
';
}
}
?>
</table>
<?php
}
?>
</div>
<br>
<footer class="container-fluid text-center">
<p>Footer Text</p>
</footer>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
var table = $('#data-table').DataTable({
"order":[],
"columnDefs":[
{
"targets":[4, 5, 6],
"orderable":false,
},
],
"pageLength": 25
});
$(document).on('click', '.delete', function(){
var id = $(this).attr("id");
if(confirm("Are you sure you want to remove this?"))
{
window.location.href="invoice.php?delete=1&id="+id;
}
else
{
return false;
}
});
});
</script>
<script>
$(document).ready(function(){
$('.number_only').keypress(function(e){
return isNumbers(e, this);
});
function isNumbers(evt, element)
{
var charCode = (evt.which) ? evt.which : event.keyCode;
if (
(charCode != 46 || $(element).val().indexOf('.') != -1) && // “.” CHECK DOT, AND ONLY ONE.
(charCode < 48 || charCode > 57))
return false;
return true;
}
});
</script>
pdf.php
<?php
//pdf.php;
require_once 'dompdf/autoload.inc.php';
use Dompdf\Dompdf;
class Pdf extends Dompdf{
public function __construct() {
parent::__construct();
}
}
?>
print_invoice.php
<?php
//print_invoice.php
if(isset($_GET["pdf"]) && isset($_GET["id"]))
{
require_once 'pdf.php';
include('database_connection.php');
$output = '';
$statement = $connect->prepare("
SELECT * FROM tbl_order
WHERE order_id = :order_id
LIMIT 1
");
$statement->execute(
array(
':order_id' => $_GET["id"]
)
);
$result = $statement->fetchAll();
foreach($result as $row)
{
$output .= '
<table width="100%" border="1" cellpadding="5" cellspacing="0">
<tr>
<td colspan="2" align="center" style="font-size:18px"><b>Invoice</b></td>
</tr>
<tr>
<td colspan="2">
<table width="100%" cellpadding="5">
<tr>
<td width="65%">
To,<br />
<b>RECEIVER (BILL TO)</b><br />
Name : '.$row["order_receiver_name"].'<br />
Billing Address : '.$row["order_receiver_address"].'<br />
</td>
<td width="35%">
Reverse Charge<br />
Invoice No. : '.$row["order_no"].'<br />
Invoice Date : '.$row["order_date"].'<br />
</td>
</tr>
</table>
<br />
<table width="100%" border="1" cellpadding="5" cellspacing="0">
<tr>
<th>Sr No.</th>
<th>Item Name</th>
<th>Quantity</th>
<th>Price</th>
<th>Actual Amt.</th>
<th colspan="2">Tax1 (%)</th>
<th colspan="2">Tax2 (%)</th>
<th colspan="2">Tax3 (%)</th>
<th rowspan="2">Total</th>
</tr>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
<th>Rate</th>
<th>Amt.</th>
</tr>';
$statement = $connect->prepare(
"SELECT * FROM tbl_order_item
WHERE order_id = :order_id"
);
$statement->execute(
array(
':order_id' => $_GET["id"]
)
);
$item_result = $statement->fetchAll();
$count = 0;
foreach($item_result as $sub_row)
{
$count++;
$output .= '
<tr>
<td>'.$count.'</td>
<td>'.$sub_row["item_name"].'</td>
<td>'.$sub_row["order_item_quantity"].'</td>
<td>'.$sub_row["order_item_price"].'</td>
<td>'.$sub_row["order_item_actual_amount"].'</td>
<td>'.$sub_row["order_item_tax1_rate"].'</td>
<td>'.$sub_row["order_item_tax1_amount"].'</td>
<td>'.$sub_row["order_item_tax2_rate"].'</td>
<td>'.$sub_row["order_item_tax2_amount"].'</td>
<td>'.$sub_row["order_item_tax3_rate"].'</td>
<td>'.$sub_row["order_item_tax3_amount"].'</td>
<td>'.$sub_row["order_item_final_amount"].'</td>
</tr>
';
}
$output .= '
<tr>
<td align="right" colspan="11"><b>Total</b></td>
<td align="right"><b>'.$row["order_total_after_tax"].'</b></td>
</tr>
<tr>
<td colspan="11"><b>Total Amt. Before Tax :</b></td>
<td align="right">'.$row["order_total_before_tax"].'</td>
</tr>
<tr>
<td colspan="11">Add : Tax1 :</td>
<td align="right">'.$row["order_total_tax1"].'</td>
</tr>
<tr>
<td colspan="11">Add : Tax2 :</td>
<td align="right">'.$row["order_total_tax2"].'</td>
</tr>
<tr>
<td colspan="11">Add : Tax3 :</td>
<td align="right">'.$row["order_total_tax3"].'</td>
</tr>
<tr>
<td colspan="11"><b>Total Tax Amt. :</b></td>
<td align="right">'.$row["order_total_tax"].'</td>
</tr>
<tr>
<td colspan="11"><b>Total Amt. After Tax :</b></td>
<td align="right">'.$row["order_total_after_tax"].'</td>
</tr>
';
$output .= '
</table>
</td>
</tr>
</table>
';
}
$pdf = new Pdf();
$file_name = 'Invoice-'.$row["order_no"].'.pdf';
$pdf->loadHtml($output);
$pdf->render();
$pdf->stream($file_name, array("Attachment" => false));
}
?>
Database
--
-- Database: `testing4`
--
-- --------------------------------------------------------
--
-- Table structure for table `tbl_order`
--
CREATE TABLE IF NOT EXISTS `tbl_order` (
`order_id` int(11) NOT NULL,
`order_no` varchar(50) NOT NULL,
`order_date` date NOT NULL,
`order_receiver_name` varchar(250) NOT NULL,
`order_receiver_address` text NOT NULL,
`order_total_before_tax` decimal(10,2) NOT NULL,
`order_total_tax1` decimal(10,2) NOT NULL,
`order_total_tax2` decimal(10,2) NOT NULL,
`order_total_tax3` decimal(10,2) NOT NULL,
`order_total_tax` decimal(10,2) NOT NULL,
`order_total_after_tax` decimal(10,2) NOT NULL,
`order_datetime` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1;
--
-- Table structure for table `tbl_order_item`
--
CREATE TABLE IF NOT EXISTS `tbl_order_item` (
`order_item_id` int(11) NOT NULL,
`order_id` int(11) NOT NULL,
`item_name` varchar(250) NOT NULL,
`order_item_quantity` decimal(10,2) NOT NULL,
`order_item_price` decimal(10,2) NOT NULL,
`order_item_actual_amount` decimal(10,2) NOT NULL,
`order_item_tax1_rate` decimal(10,2) NOT NULL,
`order_item_tax1_amount` decimal(10,2) NOT NULL,
`order_item_tax2_rate` decimal(10,2) NOT NULL,
`order_item_tax2_amount` decimal(10,2) NOT NULL,
`order_item_tax3_rate` decimal(10,2) NOT NULL,
`order_item_tax3_amount` decimal(10,2) NOT NULL,
`order_item_final_amount` decimal(10,2) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2008 DEFAULT CHARSET=latin1;
--
-- Indexes for table `tbl_order`
--
ALTER TABLE `tbl_order`
ADD PRIMARY KEY (`order_id`);
--
-- Indexes for table `tbl_order_item`
--
ALTER TABLE `tbl_order_item`
ADD PRIMARY KEY (`order_item_id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tbl_order`
--
ALTER TABLE `tbl_order`
MODIFY `order_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;
--
-- AUTO_INCREMENT for table `tbl_order_item`
--
ALTER TABLE `tbl_order_item`
MODIFY `order_item_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;