invoice,subcription

This commit is contained in:
heama 2023-10-19 18:58:53 +05:30
parent 4888e405f2
commit f476e90f6c
5 changed files with 910 additions and 716 deletions

View File

@ -144,6 +144,8 @@ class Invoice extends BaseController
$duedate = $this->request->getVar('due_date'); $duedate = $this->request->getVar('due_date');
$invdate = $this->request->getVar('invoice_date'); $invdate = $this->request->getVar('invoice_date');
$invoice_status = $this->request->getPost('status'); $invoice_status = $this->request->getPost('status');
// echo 'Hi';
// echo($this->request->getPost('invoice_number'));die();
$invoice_id = (!empty($this->request->getPost('invoice_id'))) ? $this->request->getPost('invoice_id') : ""; $invoice_id = (!empty($this->request->getPost('invoice_id'))) ? $this->request->getPost('invoice_id') : "";
$customer_id = (int)$this->request->getPost('customer_name'); $customer_id = (int)$this->request->getPost('customer_name');
$invoiceType = $this->request->getPost('invoice_type'); $invoiceType = $this->request->getPost('invoice_type');
@ -164,12 +166,13 @@ class Invoice extends BaseController
'discount' => (int)$this->request->getPost('discount'), 'discount' => (int)$this->request->getPost('discount'),
'total_amount' => (int)$this->request->getPost('grand_total'), 'total_amount' => (int)$this->request->getPost('grand_total'),
'shipping_charge' => (int)$this->request->getPost('shippingCharges'), 'shipping_charge' => (int)$this->request->getPost('shippingCharges'),
'shipping_label' =>$this->request->getPost('shippingChargesLabel'),
'order_number' => $this->request->getPost('order_number'), 'order_number' => $this->request->getPost('order_number'),
'payment_method' => 'Cash on Delivery', // "Credit Card," "Cash on Delivery," "PayPal","PayTm","Gpay" 'payment_method' =>$this->request->getPost('payment_method'), // "Credit Card," "Cash on Delivery," "PayPal","PayTm","Gpay"
'payment_status' => 'Pending', //"Paid," "Pending," "Failed," "Refunded," "Canceled," "Authorized," and "Completed." 'payment_status' => 'Pending', //"Paid," "Pending," "Failed," "Refunded," "Canceled," "Authorized," and "Completed."
'event_id' => (int)$this->request->getPost('event_id'), 'event_id' => (int)$this->request->getPost('event_id'),
'business_id' => (int)get_business_id(), 'business_id' => (int)get_business_id(),
'status' => $this->request->getPost('status'), 'status' => $this->request->getPost('saveas'),
'isactive' => 1 'isactive' => 1
]; ];
## Based on the invoice ID, we designated Insert or Update on Details... ## Based on the invoice ID, we designated Insert or Update on Details...
@ -521,8 +524,17 @@ class Invoice extends BaseController
$model = new InvoiceModel(); $model = new InvoiceModel();
$data = $model->getInvoiceData($id); $data = $model->getInvoiceData($id);
$invoiceItems = $model->getInvoiceItems($id); $invoiceItems = $model->getInvoiceItems($id);
$invoiceTerms=$model->getInvoiceData($id); $invoiceTerms= $model->getInvoiceData($id);
// print_r($invoiceTerms);die()
foreach($invoiceItems as $index => $singleItem)
{
$productImgs= $model->getProductImgs($singleItem->product);
$invoiceItems[$index]->imgs = $productImgs;
}
// print_r($invoiceItems);die();
$invoice_type = $data[0]->invoice_type; $invoice_type = $data[0]->invoice_type;
// print_r($invoiceItems);die(); // print_r($invoiceItems);die();

View File

@ -8,7 +8,7 @@ class InvoiceModel extends Model
protected $table = 'invoice'; protected $table = 'invoice';
protected $primaryKey = 'invoice_id'; protected $primaryKey = 'invoice_id';
// protected $allowedFields = ['invoice_id','invoice_number','customer_id','invoice_date','event_id','business_id','created_on','business_id']; // protected $allowedFields = ['invoice_id','invoice_number','customer_id','invoice_date','event_id','business_id','created_on','business_id'];
protected $allowedFields = ['invoice_id', 'invoice_number', 'customer_id','notes', 'invoice_date', 'due_date', 'subtotal', 'tax', 'discount', 'shipping_charge','total_amount', 'payment_status', 'order_number','invoice_type', 'payment_method', 'event_id', 'business_id', 'shipping_address_id', 'billing_address_id', 'created_on', 'created_by', 'updated_on', 'updated_by','category','isactive','billing_address','shipping_address','status']; protected $allowedFields = ['invoice_id', 'invoice_number', 'customer_id','notes', 'invoice_date', 'due_date', 'subtotal', 'tax', 'discount', 'shipping_charge','shipping_label','total_amount', 'payment_status', 'order_number','invoice_type', 'payment_method', 'event_id', 'business_id', 'shipping_address_id', 'billing_address_id', 'created_on', 'created_by', 'updated_on', 'updated_by','category','isactive','billing_address','shipping_address','status'];
public function saveInvoiceItemDetails($data){ public function saveInvoiceItemDetails($data){
$i = 0; $i = 0;
@ -125,15 +125,39 @@ public function updateData($table, $data, $where)
} }
// this function Also Used For Approve Notification. // this function Also Used For Approve Notification.
public function getInvoiceItems($id) public function getInvoiceItems($id)
{ {
return $this->db->table('invoiceitems') $data = $this->db->table('invoiceitems')
->where(['invoice_id'=>$id,'invoiceitems.isactive'=>1]) ->where(['invoice_id' => $id, 'invoiceitems.isactive' => 1])
->join('books as B','B.book_id=invoiceitems.product','left') ->join('books as B', 'B.book_id = invoiceitems.product', 'left')
->select('invoiceitems.*,B.title') // ->join('book_images as BI', 'BI.book_id = invoiceitems.product', 'left')
->select('invoiceitems.*,B.*')
//->orderBy("book_img_id", "asc") // Order by book_img_id in ascending order
//->limit(1,0)
->get() ->get()
->getResult(); ->getResult();
// print_r($this->db->getLastQuery());
return $data;
} }
public function getProductImgs($productId)
{
$data = $this->db->table('book_images')
->where(['book_id' => $productId])
// ->join('books as B', 'B.book_id = invoiceitems.product', 'left')
// ->join('book_images as BI', 'BI.book_id = invoiceitems.product', 'left')
->select('book_images.*')
//->orderBy("book_img_id", "asc") // Order by book_img_id in ascending order
//->limit(1,0)
->get()
->getResult();
// print_r($this->db->getLastQuery());
return $data;
}
public function getCategoryBooks() public function getCategoryBooks()
{ {
return $this->db->table('books') return $this->db->table('books')

View File

@ -1,14 +1,17 @@
<html> <html>
<head>
<head>
<style> <style>
.discount-header { .discount-header {
text-align: center; /* Add this to center-align the content */ text-align: center;
} /* Add this to center-align the content */
</style> }
</style>
</head> </head>
<body> <body>
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
@ -19,7 +22,7 @@
<div class="form-row"> <div class="form-row">
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label for="customerName">Customer Name</label> <label for="customerName">Customer Name</label>
<select class="form-control" id="customerName" name="customer_name"required> <select class="form-control" id="customerName" name="customer_name" required>
<option value="">Select a customer</option> <option value="">Select a customer</option>
<?php foreach ($customers as $customer) : ?> <?php foreach ($customers as $customer) : ?>
<option value="<?= $customer->customer_id ?>" <option value="<?= $customer->customer_id ?>"
@ -32,11 +35,11 @@
<div class="invalid-feedback"> Please select customer. </div> <div class="invalid-feedback"> Please select customer. </div>
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label for="loadShippingDropdown">Shipping Address</label> <label for="loadShippingDropdown">Shipping Address</label>
<select class="form-control" id="loadShippingDropdown" name="shipping_address_id"required> <select class="form-control" id="loadShippingDropdown" name="shipping_address_id">
<option value="">Select an address</option> <option value="">Select an address</option>
</select> </select>
</div> </div>
<div class="invalid-feedback"> Please select shipping address. </div>
</div> </div>
<div class="form-row"> <div class="form-row">
<div class="form-group col-md-6"> <div class="form-group col-md-6">
@ -45,12 +48,14 @@
<input type="hidden" id="hiddenBillingAddressId" name="billing_address_id" <input type="hidden" id="hiddenBillingAddressId" name="billing_address_id"
placeholder="hidden for billing address id" placeholder="hidden for billing address id"
value="<?= isset($invoice_details['billing_address_id']) ? $invoice_details['billing_address_id'] : '' ?>" /> value="<?= isset($invoice_details['billing_address_id']) ? $invoice_details['billing_address_id'] : '' ?>" />
<textarea class="form-control" id="storeBillingAddress" name="billing_address" rows="4" <textarea class="form-control" id="storeBillingAddress" name="billing_address"
rows="4"
readonly><?= isset($invoice_details['billing_address']) ? $invoice_details['billing_address'] : '' ?></textarea> readonly><?= isset($invoice_details['billing_address']) ? $invoice_details['billing_address'] : '' ?></textarea>
</div> </div>
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label for="storeShippingAddress">Shipping Address</label> <label for="storeShippingAddress">Shipping Address</label>
<textarea class="form-control" id="storeShippingAddress" name="shipping_address" rows="4" <textarea class="form-control" id="storeShippingAddress" name="shipping_address"
rows="4"
readonly><?= isset($invoice_details['shipping_address']) ? $invoice_details['shipping_address'] : '' ?></textarea> readonly><?= isset($invoice_details['shipping_address']) ? $invoice_details['shipping_address'] : '' ?></textarea>
</div> </div>
</div> </div>
@ -101,12 +106,15 @@
<?php if ($invoice_type === '1'): ?> <?php if ($invoice_type === '1'): ?>
<label for="fromsubcription">From Subcription</label> <label for="fromsubcription">From Subcription</label>
<input type="date" class="form-control" id="fromsubcription" name="from_subscription" value="<?= isset($invoice_item_details[0]['from_subscription']) ? $invoice_item_details[0]['from_subscription'] : '' ?>"> <input type="date" class="form-control" id="fromsubcription"
name="from_subscription"
value="<?= isset($invoice_item_details[0]['from_subscription']) ? $invoice_item_details[0]['from_subscription'] : '' ?>">
</div> </div>
<div class="form-group col-md-6"> <div class="form-group col-md-6">
<label for="tosubcription">To Subcription</label> <label for="tosubcription">To Subcription</label>
<input type="date" class="form-control" id="to_subcription" name="to_subscription"value="<?= isset($invoice_item_details[0]['to_subscription']) ? $invoice_item_details[0]['to_subscription'] : '' ?>"> <input type="date" class="form-control" id="to_subcription" name="to_subscription"
value="<?= isset($invoice_item_details[0]['to_subscription']) ? $invoice_item_details[0]['to_subscription'] : '' ?>">
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>
@ -133,7 +141,7 @@
<?php if(!empty($invoice_item_details)){ foreach ($invoice_item_details as $ii_details): ?> <?php if(!empty($invoice_item_details)){ foreach ($invoice_item_details as $ii_details): ?>
<tr> <tr>
<td><select class="form-control" id="book" name="item_details[]" <td><select class="form-control" id="book" name="item_details[]"
onchange="displayBookTag(this)"required> onchange="displayBookTag(this)" required>
<option value="">Select a book</option> <option value="">Select a book</option>
<?php foreach ($books as $book) : ?> <?php foreach ($books as $book) : ?>
<option value="<?= $book->book_id ?>" <option value="<?= $book->book_id ?>"
@ -142,30 +150,43 @@
<?php endforeach; ?> <?php endforeach; ?>
</select></td> </select></td>
<td style="width:10%;"><input type="number" class="form-control" <td style="width:10%;"><input type="number" class="form-control"
id="quantity" name="quantity[]" oninput="calculateInvoice(this)" value="<?= isset($ii_details['product']) ? $ii_details['quantity'] : '' ?>" /> id="quantity" name="quantity[]" oninput="calculateInvoice(this)"
value="<?= isset($ii_details['product']) ? $ii_details['quantity'] : '' ?>" />
</td> </td>
<td style="width:10%;"><input type="text" class="form-control" id="rate" <td style="width:10%;"><input type="text" class="form-control" id="rate"
name="rate[]" oninput="calculateInvoice(this)" value="<?= isset($ii_details['unit_price']) ? $ii_details['unit_price'] : '' ?>" /></td> name="rate[]" oninput="calculateInvoice(this)"
value="<?= isset($ii_details['unit_price']) ? $ii_details['unit_price'] : '' ?>" />
</td>
<td style="width:5%;"><input type="text" class="form-control item-tax" <td style="width:5%;"><input type="text" class="form-control item-tax"
id="tax" name="tax[]" value="<?= isset($ii_details['tax']) ? $ii_details['tax'] : '' ?>" /></td> id="tax" name="tax[]"
<td style="width:12%;"><input type="text" class="form-control item-amount" value="<?= isset($ii_details['tax']) ? $ii_details['tax'] : '' ?>" />
id="amount" name="amount[]" value="<?= isset($ii_details['subtotal']) ? $ii_details['subtotal'] : '' ?>" /></td> </td>
<td style="width:12%;"><input type="text" <td style="width:12%;"><input type="text"
class="form-control item-discount-amount" name="discount_amount[]" class="form-control item-amount" id="amount" name="amount[]"
oninput="calculateInvoice(this)" value="<?= isset($ii_details['discount_amount']) ? $ii_details['discount_amount'] : '' ?>" /> value="<?= isset($ii_details['subtotal']) ? $ii_details['subtotal'] : '' ?>" />
</td>
<td style="width:12%;"><input type="text"
class="form-control item-discount-amount"
name="discount_amount[]" oninput="calculateInvoice(this)"
value="<?= isset($ii_details['discount_amount']) ? $ii_details['discount_amount'] : '' ?>" />
</td> </td>
<td style="width:10%;"> <td style="width:10%;">
<select class="form-control item-discount-type" name="discount_type[]" <select class="form-control item-discount-type"
oninput="calculateInvoice(this)"> name="discount_type[]" oninput="calculateInvoice(this)">
<option value="" <?php if (isset($ii_details['discount_type']) && $ii_details['discount_type'] === '₹') echo "selected"; ?>>₹</option> <option value=""
<option value="%" <?php if (isset($ii_details['discount_type']) && $ii_details['discount_type'] === '%') echo "selected"; ?>>%</option> <?php if (isset($ii_details['discount_type']) && $ii_details['discount_type'] === '₹') echo "selected"; ?>>
</option>
<option value="%"
<?php if (isset($ii_details['discount_type']) && $ii_details['discount_type'] === '%') echo "selected"; ?>>
%</option>
</select> </select>
</td> </td>
<td><input type="hidden" class="form-control" id="hiddenInvoiceChildId" <td><input type="hidden" class="form-control" id="hiddenInvoiceChildId"
name="invoice_child_id[]" value="" name="invoice_child_id[]" value=""
placeholder="hidden for invoice child/item id" value="<?= isset($ii_details['invoice_child_id']) ? $ii_details['invoice_child_id'] : '' ?>" /> placeholder="hidden for invoice child/item id"
value="<?= isset($ii_details['invoice_child_id']) ? $ii_details['invoice_child_id'] : '' ?>" />
<center><i class="fa fa-trash remove-item "></i></center> <center><i class="fa fa-trash remove-item "></i></center>
</td> </td>
</tr> </tr>
@ -176,26 +197,29 @@
name="item_details[]" onchange="displayBookTag(this)"> name="item_details[]" onchange="displayBookTag(this)">
<option value="">Select a book</option> <option value="">Select a book</option>
<?php foreach ($books as $book) : ?> <?php foreach ($books as $book) : ?>
<option value="<?= $book->book_id ?>"><?= $book->title ?></option> <option value="<?= $book->book_id ?>"><?= $book->title ?>
</option>
<?php endforeach; ?> <?php endforeach; ?>
</select></td> </select></td>
<td style="width:10%;"><input type="number" class="form-control" <td style="width:10%;"><input type="number" class="form-control"
id="quantity" name="quantity[]" oninput="calculateInvoice(this)" /> id="quantity" name="quantity[]"
oninput="calculateInvoice(this)" />
</td> </td>
<td style="width:10%;"><input type="text" class="form-control" id="rate" <td style="width:10%;"><input type="text" class="form-control" id="rate"
name="rate[]" oninput="calculateInvoice(this)" /></td> name="rate[]" oninput="calculateInvoice(this)" /></td>
<td style="width:5%;"><input type="text" class="form-control item-tax" <td style="width:5%;"><input type="text" class="form-control item-tax"
id="tax" name="tax[]" /></td> id="tax" name="tax[]" /></td>
<td style="width:12%;"><input type="text" class="form-control item-amount" <td style="width:12%;"><input type="text"
id="amount" name="amount[]" /></td> class="form-control item-amount" id="amount" name="amount[]" />
</td>
<td class="discount-cell" style="width:12%;"><input type="text" <td class="discount-cell" style="width:12%;"><input type="text"
class="form-control item-discount-amount" name="discount_amount[]" class="form-control item-discount-amount"
oninput="calculateInvoice(this)" /> name="discount_amount[]" oninput="calculateInvoice(this)" />
</td> </td>
<td style="width:10%;"> <td style="width:10%;">
<select class="form-control item-discount-type" name="discount_type[]" <select class="form-control item-discount-type"
oninput="calculateInvoice(this)"> name="discount_type[]" oninput="calculateInvoice(this)">
<option value=""></option> <option value=""></option>
<option value="%">%</option> <option value="%">%</option>
</select> </select>
@ -228,7 +252,8 @@
<h4>Calculation</h4> <h4>Calculation</h4>
<div class="form-group"> <div class="form-group">
<label for="subtotal">Subtotal</label> <label for="subtotal">Subtotal</label>
<input type="text" class="form-control" id="subtotal" name="sub_total" readonly <input type="text" class="form-control" id="subtotal" name="sub_total"
readonly
value="<?= isset($invoice_details['subtotal']) ? $invoice_details['subtotal'] : '' ?>"> value="<?= isset($invoice_details['subtotal']) ? $invoice_details['subtotal'] : '' ?>">
</div> </div>
<div class="form-group"> <div class="form-group">
@ -237,12 +262,36 @@
readonly readonly
value="<?= isset($invoice_details['tax']) ? $invoice_details['tax'] : '' ?>"> value="<?= isset($invoice_details['tax']) ? $invoice_details['tax'] : '' ?>">
</div> </div>
<?php
// Check if it's a subscription invoice
$isSubscriptionInvoice = ($page_name === 'Add Subscription Invoice Details' || $page_name === 'Edit Subscription Invoice Details');
// Conditionally set the "hidden" attribute for the fields
$balanceHidden = $isSubscriptionInvoice ? 'hidden' : '';
$paidAmountHidden = $isSubscriptionInvoice ? 'hidden' : '';
$shippingChargesHidden = $isSubscriptionInvoice ? 'hidden' : '';
$balanceStyle = $isSubscriptionInvoice ? 'display: none;' : '';
$paidAmountStyle = $isSubscriptionInvoice ? 'display: none;' : '';
$shippingChargesStyle = $isSubscriptionInvoice ? 'display: none;' : '';
?>
<div class="form-group"> <div class="form-group">
<label for="shippingCharges">Shipping Charges:</label> <span style="<?= $shippingChargesStyle ?>">
<input type="number" class="form-control" id="shippingCharges" name="shippingCharges" oninput="calculateOverallTotals()">
<input type="text" class="form-control" id="shippingChargesLabel"
name="shippingChargesLabel" placeholder="Shipping Charges Label"
value="Shipping Charge" oninput="calculateOverallTotals()"
<?= $shippingChargesHidden ?>>
</span>
<span style="<?= $shippingChargesStyle ?>">
<input type="text" class="form-control" id="shippingCharges"
name="shippingCharges" placeholder="Shipping Charges"
oninput="calculateOverallTotals()" <?= $shippingChargesHidden ?>>
</span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="discount">Discount</label> <label for="discount">Discount</label>
<input type="number" class="form-control" id="discount" name="discount" <input type="number" class="form-control" id="discount" name="discount"
@ -255,41 +304,95 @@
readonly readonly
value="<?= isset($invoice_details['total_amount']) ? $invoice_details['total_amount'] : '' ?>"> value="<?= isset($invoice_details['total_amount']) ? $invoice_details['total_amount'] : '' ?>">
</div> </div>
<div class="form-group">
<label for="balanceAmount" style="<?= $balanceStyle ?>">Balance
Amount:</label>
<input type="number" class="form-control" id="balanceAmount"
name="balanceAmount"
value="<?= (isset($invoice_details['status']) && $invoice_details['status'] === 'Draft') ? (isset($invoice_details['total_amount']) ? $invoice_details['total_amount'] : '') : '0' ?>"
oninput="calculateOverallTotals()" <?= $balanceHidden ?>>
</div>
<div class="form-group">
<label for="paidAmount" style="<?= $paidAmountStyle ?>">Paid Amount:</label>
<input type="number" class="form-control" id="paidAmount" name="paidAmount"
value="<?= (isset($invoice_details['status']) && $invoice_details['status'] === 'Approved') ? (isset($invoice_details['total_amount']) ? $invoice_details['total_amount'] : '') : '0' ?>"
oninput="calculateOverallTotals()" <?= $paidAmountHidden ?>>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-row">
<div class="form-group text-left col-md-12 "> <div class="form-group text-left col-md-12 ">
<label for="notes">Notes</label> <label for="notes">Notes</label>
<textarea class="form-control" id="terms" name="notes" > <textarea class="form-control" id="terms" name="notes">
<?= isset($invoice_details['notes']) ? $invoice_details['notes'] : '' ?> <?= isset($invoice_details['notes']) ? $invoice_details['notes'] : '' ?>
</textarea> </textarea>
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" id="paymentModal" tabindex="-1" role="dialog"
aria-labelledby="paymentModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="paymentModalLabel">Select Mode of Payment</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<!-- Add your mode of payment options here -->
<select class="form-control" id="paymentMode" name="payment_method">
<option value="credit">Credit Card</option>
<option value="debit">Debit Card</option>
<option value="cash">Cash</option>
<option value="upi">UPI</option>
<option value="banktransfer">Bank Transfer</option>
<!-- Add more options as needed -->
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary" name="saveas" value="Approved"
id="saveapproved">Save as Approved</button>
</div>
</div>
</div>
</div>
<input type="hidden" id="status" name="status"
value="<?= isset($invoice_details['status']) ? $invoice_details['status'] : '' ?>">
<input type="hidden" id="hiddenInvoiceId" name="invoice_id" placeholder="hidden for invoice id" <input type="hidden" id="hiddenInvoiceId" name="invoice_id" placeholder="hidden for invoice id"
value="<?= isset($invoice_details['invoice_id']) ? $invoice_details['invoice_id'] : '' ?>" /> value="<?= isset($invoice_details['invoice_id']) ? $invoice_details['invoice_id'] : '' ?>" />
<div class="form-group text-right m-b-0"> <div class="form-group text-right m-b-0">
<?php if (!isset($invoice_details['status']) || $invoice_details['status'] !== 'Approved'): ?> <?php if (!isset($invoice_details['status']) || $invoice_details['status'] !== 'Approved'): ?>
<!-- Show the "Save as Draft" button only if the status is not "Approved" --> <!-- Show the "Save as Draft" button only if the status is not "Approved" -->
<button type="submit" class="btn btn-primary waves-effect mr-1" name="save_as_draft" id="saveDraftButton">Save as Draft</button> <button type="submit" class="btn btn-primary waves-effect mr-1" name="saveas" value="Draft"
id="saveDraftButton">Save as Draft</button>
<?php endif; ?> <?php endif; ?>
<?php if (!isset($invoice_details['status']) || $invoice_details['status'] !== 'Approved'): ?> <?php if (!isset($invoice_details['status']) || $invoice_details['status'] !== 'Approved'): ?>
<!-- Show the "Save as Approved" button only if the status is not "Approved" --> <!-- Show the "Save as Approved" button only if the status is not "Approved" -->
<button type="submit" class="btn btn-primary waves-effect mr-1" name="save_as_approved" id="saveApprovedButton">Save as Approved</button> <button type="button" class="btn btn-primary waves-effect mr-1" name="saveas"
value="Approved" id="saveApprovedButton">Save as Approved</button>
<?php endif; ?> <?php endif; ?>
<input type="hidden" name="invoice_type" value="<?php echo ($page_name === 'Add Subscription Invoice Details' || $page_name === 'Edit Subscription Invoice Details') ? '1' : '2'; ?>"> <input type="hidden" name="invoice_type"
<input type="hidden" id="status" name="status" value="<?= isset($invoice_details['status']) ? $invoice_details['status'] : '' ?>"> value="<?php echo ($page_name === 'Add Subscription Invoice Details' || $page_name === 'Edit Subscription Invoice Details') ? '1' : '2'; ?>">
</div> <input type="hidden" id="status" name="status"
value="<?= isset($invoice_details['status']) ? $invoice_details['status'] : '' ?>">
</div> </div>
</div>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script>
document.getElementById("addItem").addEventListener("click", function() {
<script>
document.getElementById("addItem").addEventListener("click", function() {
var bookArray = <?php echo json_encode($books); ?>; var bookArray = <?php echo json_encode($books); ?>;
var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0]; var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
var newRow = table.insertRow(table.rows.length); var newRow = table.insertRow(table.rows.length);
@ -326,13 +429,18 @@ document.getElementById("addItem").addEventListener("click", function() {
}); });
cell1.appendChild(select); cell1.appendChild(select);
// cell1.innerHTML = '<input type="text" class="form-control" name="item_details[]">'; // cell1.innerHTML = '<input type="text" class="form-control" name="item_details[]">';
cell2.innerHTML = '<input type="number" class="form-control" id="quantity" name="quantity[]" oninput="calculateInvoice(this)">'; cell2.innerHTML =
cell3.innerHTML = '<input type="text" class="form-control" id="rate" name="rate[]" oninput="calculateInvoice(this)">'; '<input type="number" class="form-control" id="quantity" name="quantity[]" oninput="calculateInvoice(this)">';
cell3.innerHTML =
'<input type="text" class="form-control" id="rate" name="rate[]" oninput="calculateInvoice(this)">';
cell4.innerHTML = '<input type="text" class="form-control item-tax" id="tax" name="tax[]">'; cell4.innerHTML = '<input type="text" class="form-control item-tax" id="tax" name="tax[]">';
cell5.innerHTML = '<input type="text" class="form-control item-amount" id="amount" name="amount[]">'; cell5.innerHTML = '<input type="text" class="form-control item-amount" id="amount" name="amount[]">';
cell6.innerHTML = '<input type="text" class="form-control item-discount-amount" name="discount_amount[]">'; cell6.innerHTML =
cell7.innerHTML = '<select class="form-control item-discount-type" name="discount_type[]" oninput="calculateInvoice(this)"><option value="₹">₹</option><option value="%">%</option></select>'; '<input type="text" class="form-control item-discount-amount" name="discount_amount[]">';
cell8.innerHTML = '<input type="hidden" class="form-control" id="hiddenInvoiceChildId" placeholder="hidden for invoice child/item id" name="invoice_child_id[]" value=""><center><i class="fa fa-trash remove-item "></center>'; cell7.innerHTML =
'<select class="form-control item-discount-type" name="discount_type[]" oninput="calculateInvoice(this)"><option value="₹">₹</option><option value="%">%</option></select>';
cell8.innerHTML =
'<input type="hidden" class="form-control" id="hiddenInvoiceChildId" placeholder="hidden for invoice child/item id" name="invoice_child_id[]" value=""><center><i class="fa fa-trash remove-item "></center>';
// Attach the calculateInvoice function to new input fields' change events // Attach the calculateInvoice function to new input fields' change events
// cell1.getElementsByTagName("input")[0].addEventListener("change", calculateInvoice); // cell1.getElementsByTagName("input")[0].addEventListener("change", calculateInvoice);
@ -353,13 +461,13 @@ document.getElementById("addItem").addEventListener("click", function() {
newRow.querySelector('.discount-type-select').addEventListener("change", function() { newRow.querySelector('.discount-type-select').addEventListener("change", function() {
calculateInvoice(this); calculateInvoice(this);
}); });
}); });
// cell4.getElementsByTagName("input")[0].addEventListener("change", calculateInvoice); // cell4.getElementsByTagName("input")[0].addEventListener("change", calculateInvoice);
function displayBookTag(inputElement) { function displayBookTag(inputElement) {
var row = inputElement.parentElement.parentElement; var row = inputElement.parentElement.parentElement;
var bookId = inputElement.value; var bookId = inputElement.value;
var bookArray = <?php echo json_encode($books); ?>; var bookArray = <?php echo json_encode($books); ?>;
@ -371,9 +479,9 @@ function displayBookTag(inputElement) {
row.querySelector("#tax").value = selectedBook.tax ? selectedBook.tax : 0; row.querySelector("#tax").value = selectedBook.tax ? selectedBook.tax : 0;
row.querySelector("#tax").readOnly = true; row.querySelector("#tax").readOnly = true;
} }
function calculateInvoice(inputElement) { function calculateInvoice(inputElement) {
var row = inputElement.parentElement.parentElement; var row = inputElement.parentElement.parentElement;
var quantity = parseFloat(row.querySelector('#quantity').value); var quantity = parseFloat(row.querySelector('#quantity').value);
var rate = parseFloat(row.querySelector('#rate').value); var rate = parseFloat(row.querySelector('#rate').value);
@ -402,9 +510,9 @@ function calculateInvoice(inputElement) {
} }
calculateOverallTotals(); calculateOverallTotals();
} }
function calculateOverallTotals() { function calculateOverallTotals() {
var itemAmountInputs = document.querySelectorAll('.item-amount'); var itemAmountInputs = document.querySelectorAll('.item-amount');
var itemTaxInputs = document.querySelectorAll('.item-tax'); var itemTaxInputs = document.querySelectorAll('.item-tax');
var itemDiscountAmountInputs = document.querySelectorAll('.item-discount-amount'); var itemDiscountAmountInputs = document.querySelectorAll('.item-discount-amount');
@ -452,12 +560,24 @@ function calculateOverallTotals() {
var totalElement = total.toFixed(2); var totalElement = total.toFixed(2);
$("#grandtotal").val(totalElement); $("#grandtotal").val(totalElement);
} var status = document.getElementById('status').value;
// $("#balanceAmount").val(totalElement);
if (status == 'Draft') {
$("#balanceAmount").val(totalElement);
$("#paidAmount").val('0');
} else if (status == 'Approved') {
$("#balanceAmount").val('0');
$("#paidAmount").val(totalElement);
}
}
// Define a function to calculate the grand total
// Define a function to calculate the grand total // Define a function to calculate the grand total
function calculateGrandTotal() { // Define a function to calculate the grand total
function calculateGrandTotal() {
var invoiceItems = []; // Create an empty array to store item details var invoiceItems = []; // Create an empty array to store item details
// Loop through the rows of the item table to gather item details // Loop through the rows of the item table to gather item details
@ -465,7 +585,8 @@ function calculateGrandTotal() {
rows.forEach(function(row) { rows.forEach(function(row) {
var item = { var item = {
subtotal: parseFloat(row.querySelector("#amount").value) || 0, subtotal: parseFloat(row.querySelector("#amount").value) || 0,
discount_amount: parseFloat(row.querySelector('input[name="discount_amount[]"]').value) || 0, discount_amount: parseFloat(row.querySelector('input[name="discount_amount[]"]').value) ||
0,
discount_type: row.querySelector('select[name="discount_type[]"]').value discount_type: row.querySelector('select[name="discount_type[]"]').value
}; };
invoiceItems.push(item); // Add the item to the array invoiceItems.push(item); // Add the item to the array
@ -497,94 +618,95 @@ function calculateGrandTotal() {
// Update the grand total in the UI // Update the grand total in the UI
var grandTotalElement = grandTotal.toFixed(2); var grandTotalElement = grandTotal.toFixed(2);
document.getElementById("grandtotal").value = grandTotalElement; document.getElementById("grandtotal").value = grandTotalElement;
} }
// the calculateOverallTotals function whenever you need to recalculate the totals, such as when a new item is added or an item is edited. // the calculateOverallTotals function whenever you need to recalculate the totals, such as when a new item is added or an item is edited.
// function calculateSubTotal() { // function calculateSubTotal() {
// var amountInputs = document.querySelectorAll('.amount-input'); // var amountInputs = document.querySelectorAll('.amount-input');
// var subTotal = 0; // var subTotal = 0;
// var taxInputs = document.querySelectorAll('.tax-input'); // var taxInputs = document.querySelectorAll('.tax-input');
// var taxTotal = 0; // var taxTotal = 0;
// var discountAmountInputs = document.querySelectorAll('.discount-amount-input'); // var discountAmountInputs = document.querySelectorAll('.discount-amount-input');
// var discountTypeSelects = document.querySelectorAll('.discount-type-select'); // var discountTypeSelects = document.querySelectorAll('.discount-type-select');
// var overallDiscount = 0; // var overallDiscount = 0;
// amountInputs.forEach(function (input, index) { // amountInputs.forEach(function (input, index) {
// var amount = parseFloat(input.value) || 0; // var amount = parseFloat(input.value) || 0;
// subTotal += amount; // subTotal += amount;
// var tax = parseFloat(taxInputs[index].value) || 0; // var tax = parseFloat(taxInputs[index].value) || 0;
// taxTotal += tax; // taxTotal += tax;
// var discountType = discountTypeSelects[index].value; // var discountType = discountTypeSelects[index].value;
// var discountAmount = parseFloat(discountAmountInputs[index].value) || 0; // var discountAmount = parseFloat(discountAmountInputs[index].value) || 0;
// if (discountType === '₹') { // if (discountType === '₹') {
// // Calculate discount based on ₹ // // Calculate discount based on ₹
// var discountedAmount = amount - discountAmount; // var discountedAmount = amount - discountAmount;
// overallDiscount += discountAmount; // overallDiscount += discountAmount;
// } else if (discountType === '%') { // } else if (discountType === '%') {
// // Calculate discount based on % // // Calculate discount based on %
// var discountPercentage = discountAmount; // var discountPercentage = discountAmount;
// var discountValue = (amount * discountPercentage) / 100; // var discountValue = (amount * discountPercentage) / 100;
// var discountedAmount = amount - discountValue; // var discountedAmount = amount - discountValue;
// overallDiscount += discountValue; // overallDiscount += discountValue;
// } // }
// }); // });
// var subTotalElement = subTotal.toFixed(2); // var subTotalElement = subTotal.toFixed(2);
// $("#subtotal").val(subTotalElement); // $("#subtotal").val(subTotalElement);
// var taxElement = taxTotal.toFixed(2); // var taxElement = taxTotal.toFixed(2);
// $("#invoicetax").val(taxElement); // $("#invoicetax").val(taxElement);
// var overallDiscountElement = overallDiscount.toFixed(2); // var overallDiscountElement = overallDiscount.toFixed(2);
// $("#discount").val(overallDiscountElement); // $("#discount").val(overallDiscountElement);
// calculateGrandTotal(subTotal, taxTotal, overallDiscount); // calculateGrandTotal(subTotal, taxTotal, overallDiscount);
// } // }
// function calculateGrandTotal(subTotal, invoiceTax, discount) { // function calculateGrandTotal(subTotal, invoiceTax, discount) {
// var grandTotal = 0; // var grandTotal = 0;
// if (!isNaN(subTotal) && !isNaN(invoiceTax) && !isNaN(discount)) { // if (!isNaN(subTotal) && !isNaN(invoiceTax) && !isNaN(discount)) {
// grandTotal = subTotal + invoiceTax - discount; // grandTotal = subTotal + invoiceTax - discount;
// } // }
// var grandElement = grandTotal.toFixed(2); // var grandElement = grandTotal.toFixed(2);
// $("#grandtotal").val(grandElement); // $("#grandtotal").val(grandElement);
// } // }
</script> </script>
<!-- JavaScript for removing a row from the table --> <!-- JavaScript for removing a row from the table -->
<script> <script>
// Function to remove a row from the table // Function to remove a row from the table
function removeItem(row) { function removeItem(row) {
var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0]; var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
table.removeChild(row); table.removeChild(row);
calculateSubTotal(); // Call the calculation function to update the totals calculateSubTotal(); // Call the calculation function to update the totals
} }
// Attach the removeItem function to the Remove buttons using event delegation // Attach the removeItem function to the Remove buttons using event delegation
document.querySelector("#itemTable tbody").addEventListener("click", function(event) { document.querySelector("#itemTable tbody").addEventListener("click", function(event) {
if (event.target.classList.contains("remove-item")) { if (event.target.classList.contains("remove-item")) {
var row = event.target.closest("tr"); // Find the closest row to the clicked button var row = event.target.closest("tr"); // Find the closest row to the clicked button
removeItem(row); removeItem(row);
} }
}); });
</script> </script>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var iid_arr = <?php echo json_encode($invoice_item_details); ?>; var iid_arr = <?php echo json_encode($invoice_item_details); ?>;
var cust_id = "<?= isset($invoice_details['customer_id']) ? $invoice_details['customer_id'] : ""; ?>"; var cust_id = "<?= isset($invoice_details['customer_id']) ? $invoice_details['customer_id'] : ""; ?>";
var ship_addr = "<?= isset($invoice_details['shipping_address']) ? $invoice_details['shipping_address'] : ""; ?>"; var ship_addr =
"<?= isset($invoice_details['shipping_address']) ? $invoice_details['shipping_address'] : ""; ?>";
var ship_addr_id = var ship_addr_id =
"<?= isset($invoice_details['shipping_address_id']) ? $invoice_details['shipping_address_id'] : ""; ?>"; "<?= isset($invoice_details['shipping_address_id']) ? $invoice_details['shipping_address_id'] : ""; ?>";
var bill_addr = var bill_addr =
@ -644,7 +766,9 @@ $(document).ready(function() {
customer_billing = ""; customer_billing = "";
if (cb.length > 0) { if (cb.length > 0) {
$.each(cb, function(k, v) { $.each(cb, function(k, v) {
customer_billing = v.address_1 + " " + v.address_2 + ",\n" + v.city + ",\n" + v.state + " - "+v.postal_code+",\n"+ v.country +"." customer_billing = v.address_1 + " " + v.address_2 + ",\n" + v
.city + ",\n" + v.state + " - " + v.postal_code + ",\n" + v
.country + "."
customer_billing_id = v.customer_address_id customer_billing_id = v.customer_address_id
}); });
} }
@ -664,7 +788,7 @@ $(document).ready(function() {
$('#loadShippingDropdown').empty(); $('#loadShippingDropdown').empty();
if (ship_addr != '') { if (ship_addr != '') {
$("#storeShippingAddress").val(ship_addr); $("#storeShippingAddress").val(ship_addr);
}else{ } else {
$('#storeShippingAddress').val(''); $('#storeShippingAddress').val('');
} }
$('#loadShippingDropdown').append($('<option>', { $('#loadShippingDropdown').append($('<option>', {
@ -675,7 +799,8 @@ $(document).ready(function() {
$('#loadShippingDropdown').append($('<option>', { $('#loadShippingDropdown').append($('<option>', {
value: v.customer_address_id, value: v.customer_address_id,
text: v.address, text: v.address,
selected: (v.customer_address_id == ship_addr_id) ? selected: (v.customer_address_id ==
ship_addr_id) ?
true : false true : false
})); }));
@ -702,7 +827,9 @@ $(document).ready(function() {
customer_shipping = ""; customer_shipping = "";
if (cs.length > 0) { if (cs.length > 0) {
$.each(cs, function(k, v) { $.each(cs, function(k, v) {
customer_shipping = v.address_1 + " " + v.address_2 + ",\n" + v.city + ",\n" + v.state + " - "+v.postal_code+",\n"+ v.country +"." customer_shipping = v.address_1 + " " + v.address_2 + ",\n" + v
.city + ",\n" + v.state + " - " + v.postal_code + ",\n" + v
.country + "."
}); });
} }
// console.log(customer_shipping); // console.log(customer_shipping);
@ -732,36 +859,32 @@ $(document).ready(function() {
return serial_number; return serial_number;
} }
});
</script>
<script>
document.getElementById('saveDraftButton').addEventListener('click', function () {
// Set the status field to 'Draft' before submitting
document.getElementById('status').value = 'Draft';
}); });
</script>
document.getElementById('saveApprovedButton').addEventListener('click', function () { <script>
// Set the status field to 'Approved' before submitting document.getElementById('saveapproved').addEventListener('click', function() {
// Set the status field to 'Draft' before submitting
document.getElementById('status').value = 'Approved'; document.getElementById('status').value = 'Approved';
}); });
</script> </script>
<script> <script>
// Get the Invoice Date input element by its ID // Get the Invoice Date input element by its ID
const invoiceDateInput = document.getElementById("invoiceDate"); const invoiceDateInput = document.getElementById("invoiceDate");
// Get the current date // Get the current date
const currentDate = new Date(); const currentDate = new Date();
// Set the minimum date attribute to today's date (YYYY-MM-DD format) // Calculate the min and max date strings
const minDate = currentDate.toISOString().split("T")[0]; const minDate = "YYYY-MM-DD"; // Replace with your desired minimum date
invoiceDateInput.setAttribute("min", minDate); const maxDate = currentDate.toISOString().split("T")[0]; // Today's date in YYYY-MM-DD format
// Optional: Set the default value to today's date // Set the min and max date attributes
invoiceDateInput.setAttribute("min", minDate);
invoiceDateInput.setAttribute("max", maxDate);
</script>
</script> <script>
document.addEventListener("DOMContentLoaded", function() {
<script>
document.addEventListener("DOMContentLoaded", function () {
// Get the Due Date input element by its ID // Get the Due Date input element by its ID
const dueDateInput = document.getElementById("dueDate"); const dueDateInput = document.getElementById("dueDate");
@ -775,7 +898,35 @@ invoiceDateInput.setAttribute("min", minDate);
// Optional: Set the default value to today's date // Optional: Set the default value to today's date
}); });
</script> </script>
<script>
// When the "Save as Approved" button is clicked
document.getElementById('saveApprovedButton').addEventListener('click', function() {
// Show the payment modal
$('#paymentModal').modal('show');
// When the "Confirm Payment" button in the modal is clicked
// Get the selected mode of payment
var selectedPaymentMode = document.getElementById('paymentMode').value;
// You can now use the selected payment mode as needed
console.log('Selected Payment Mode: ' + selectedPaymentMode);
// Close the modal
$('#paymentModal').modal('hide');
});
</script>
<script>
document.getElementById('saveapproved').addEventListener('click', function() {
// Get the balance amount
var balanceAmount = parseFloat(document.getElementById('balanceAmount').value) || 0;
// Replicate the balance amount value to the paid amount
document.getElementById('paidAmount').value = balanceAmount;
});
</script>
</body> </body>
</html> </html>

View File

@ -5,10 +5,10 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="float-right"> <div class="float-right">
<a href="#" id="addNewButton" class="btn btn-primary"><i class="fe-file-text"></i> Add New </a> <a href="new_book_invoice/0" class="btn btn-primary"><i class="ri-currency-line"></i> Add New </a>
<!-- HTML for the "Add New" button --> <!-- HTML for the "Add New" button -->
<div id="standard-modal" > <!-- <div id="standard-modal" >
<div id="invoiceTypeModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true"> <div id="invoiceTypeModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm"> <div class="modal-dialog modal-sm">
@ -28,11 +28,9 @@
<div class="modal-footer"> <div class="modal-footer">
<button id="confirmInvoiceType">Continue</button> <button id="confirmInvoiceType">Continue</button>
</div> </div>
</div><!-- /.modal-content --> </div>< /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</div>
</div> </div>
<br> <br>
<h4 class="header-title mb-3"><?= $page_name; ?></h4> <h4 class="header-title mb-3"><?= $page_name; ?></h4>

View File

@ -237,6 +237,7 @@ if (count($invoiceDateParts) === 3) {
<table class="invoice-related-table"> <table class="invoice-related-table">
<thead> <thead>
<tr> <tr>
<th>Image</th>
<th>Item Name</th> <th>Item Name</th>
<th>Qty</th> <th>Qty</th>
<th>Rate</th> <th>Rate</th>
@ -248,6 +249,14 @@ if (count($invoiceDateParts) === 3) {
<tbody> <tbody>
<?php foreach ($invoiceItems as $item) : ?> <?php foreach ($invoiceItems as $item) : ?>
<tr> <tr>
<td>
<?php if (!empty($item->imgs[0]->wp_img_url)) : ?>
<img src="<?= $item->imgs[0]->wp_img_url?>" alt="Product Image"style="max-width: 50px; max-height: 30px;">
<?php else : ?>
<img src="<?= base_url('public/uploads/' . $item->imgs[0]->img_name) ?>" alt="Fallback Image"style="max-width: 50px; max-height: 30px;">
<?php endif; ?>
</td>
<td><?= $item->title ?></td> <td><?= $item->title ?></td>
<td><?= $item->quantity ?></td> <td><?= $item->quantity ?></td>
<td><?= number_format($item->unit_price, 2, '.', ',') ?></td> <td><?= number_format($item->unit_price, 2, '.', ',') ?></td>
@ -276,7 +285,7 @@ if (count($invoiceDateParts) === 3) {
<td colspan="5" align="right">Discount : &nbsp;&nbsp;<?= number_format($value->discount, 2, '.', ',') ?></td> <td colspan="5" align="right">Discount : &nbsp;&nbsp;<?= number_format($value->discount, 2, '.', ',') ?></td>
</tr> </tr>
<tr> <tr>
<td colspan="5" align="right">Shipping : &nbsp;&nbsp;<?= number_format($value->shipping_charge, 2, '.', ',') ?></td> <td colspan="5" align="right"><?= $value->shipping_label?> : &nbsp;&nbsp;₹<?= number_format($value->shipping_charge, 2, '.', ',') ?></td>
</tr> </tr>
<tr> <tr>
<td colspan="5" align="right">Total : &nbsp;&nbsp;<?= number_format($value->subtotal, 2, '.', ',') ?></td> <td colspan="5" align="right">Total : &nbsp;&nbsp;<?= number_format($value->subtotal, 2, '.', ',') ?></td>