547 lines
18 KiB
PHP
547 lines
18 KiB
PHP
|
<style>
|
||
|
.bootstrap-select>.dropdown-toggle.bs-placeholder,
|
||
|
.bootstrap-select>.dropdown-toggle.bs-placeholder:hover,
|
||
|
.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,
|
||
|
.bootstrap-select>.dropdown-toggle.bs-placeholder:active {
|
||
|
height: 38px;
|
||
|
}
|
||
|
|
||
|
.bootstrap-select .dropdown-toggle .filter-option-inner {
|
||
|
margin-top: 4px;
|
||
|
margin-left: 4px;
|
||
|
}
|
||
|
|
||
|
.form-group .bootstrap-select>.dropdown-toggle {
|
||
|
height: 38px;
|
||
|
}
|
||
|
|
||
|
label .error {
|
||
|
top: 2.5rem !important;
|
||
|
color: red;
|
||
|
left: 0em;
|
||
|
}
|
||
|
|
||
|
.display tr {
|
||
|
font-size: 12.5px;
|
||
|
}
|
||
|
|
||
|
table.dataTable thead th,
|
||
|
table.dataTable thead td {
|
||
|
padding: 4px 8px;
|
||
|
}
|
||
|
</style>
|
||
|
<div class="wraper responsive-width">
|
||
|
<main>
|
||
|
<div class="admin_tempblock">
|
||
|
<div class="admin_tempsec">
|
||
|
<div class="admin_sec">
|
||
|
<div class="subsec_sec">
|
||
|
<div class="subject_r subject_r_lng">
|
||
|
<div class="subject_lsec">
|
||
|
|
||
|
<div class="mb-4">
|
||
|
<nav aria-label="breadcrumb">
|
||
|
<ol class="breadcrumb">
|
||
|
<li class="breadcrumb-item"><a href="<?= base_url() . 'admin/inventory/dashboard' ?>">Dashboard</a></li>
|
||
|
<li class="breadcrumb-item"><a href="<?= base_url() . 'admin/inventory/item-sales' ?>">Sales</a></li>
|
||
|
<li class="breadcrumb-item active" aria-current="page"><?= $title ?></li>
|
||
|
</ol>
|
||
|
</nav>
|
||
|
</div>
|
||
|
|
||
|
<?php if ($this->session->flashdata('success')) { ?>
|
||
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||
|
<p><b> Success !</b> <?php echo $this->session->flashdata('success') ?></p>
|
||
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||
|
<span aria-hidden="true">×</span>
|
||
|
</button>
|
||
|
</div>
|
||
|
<?php } ?>
|
||
|
|
||
|
<?php if ($this->session->flashdata('danger')) { ?>
|
||
|
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||
|
<p><b> Error !</b> <?php echo $this->session->flashdata('danger') ?></p>
|
||
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||
|
<span aria-hidden="true">×</span>
|
||
|
</button>
|
||
|
</div>
|
||
|
<?php } ?>
|
||
|
<div class="d-flex justify-content-end mb-3 small">
|
||
|
<b style="font-weight: 500">Quick Links:</b>
|
||
|
<a href="<?= base_url() ?>admin/inventory/book-publication" class="text-primary px-1"> Publications </a> |
|
||
|
<a href="<?= base_url() ?>admin/inventory/item-categories" class="text-primary px-1"> Item Categories </a> |
|
||
|
<a href="<?= base_url() ?>admin/inventory/items" class="text-primary px-1"> Items </a> |
|
||
|
<a href="<?= base_url() ?>admin/inventory/item-stocks" class="text-primary px-1"> Stocks </a> |
|
||
|
<a href="<?= base_url() ?>admin/inventory/add-edit-new-entry/0" class="text-primary px-1"> New Purchase Entry </a> |
|
||
|
<a href="<?= base_url() ?>admin/inventory/add-new-sales-record/0" class="text-primary px-1"> New Sales Entry </a>
|
||
|
</div>
|
||
|
|
||
|
<div class="row justify-content-center ">
|
||
|
|
||
|
<div class="col-md-5">
|
||
|
<form id="itemForm">
|
||
|
<div class="card">
|
||
|
<div class="card-body">
|
||
|
<div class="text-right">
|
||
|
<h6 id="available-stock"> </h6>
|
||
|
</div>
|
||
|
<div class="h6">Student Details</div>
|
||
|
<div class="form-group mt-3">
|
||
|
<label class="has-float-label">
|
||
|
<select id="student" class="form-control selectpicker" name="student" data-live-search="true" required>
|
||
|
<option value="">
|
||
|
Select Student
|
||
|
</option>
|
||
|
<?php
|
||
|
foreach ($students as $std_key => $student) {
|
||
|
?>
|
||
|
<option value="<?= $student['id'] ?>">
|
||
|
<?= $student['name'] ?>
|
||
|
</option>
|
||
|
<?php
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<span>Student <b class="text-danger">*</b></span>
|
||
|
</label>
|
||
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<input type="text" name="s_class" class="form-control" id="s_class" placeholder="Class" readonly>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<input type="text" name="s_section" class="form-control" id="s_section" placeholder="Section" readonly>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<hr>
|
||
|
<div class="h6">Item Details</div>
|
||
|
<div class="form-group mt-3">
|
||
|
<label class="has-float-label">
|
||
|
<select id="item" class="form-control selectpicker" name="item" data-live-search="true" required>
|
||
|
<option value="">
|
||
|
Select Item
|
||
|
</option>
|
||
|
|
||
|
</select>
|
||
|
<span>Item <b class="text-danger">*</b></span>
|
||
|
</label>
|
||
|
</div>
|
||
|
|
||
|
<div class="row mt-3">
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<!-- <label class="has-float-label"> -->
|
||
|
<select id="i_price" class="form-control selectpicker" name="i_price" data-live-search="true">
|
||
|
<option value="">
|
||
|
Select Price
|
||
|
</option>
|
||
|
</select>
|
||
|
<!-- <span>Price <b class="text-danger">*</b></span> -->
|
||
|
<!-- </label> -->
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<input type="number" name="i_qty" class="form-control" id="i_qty" placeholder="Quantity" min="1">
|
||
|
<input type="hidden" name="i_purchase_id" class="form-control" id="i_purchase_id" placeholder="Purchase Id">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<input type="number" name="i_selling_price" class="form-control" id="i_selling_price" placeholder="Amount">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="w-100"></div>
|
||
|
<div class="col">
|
||
|
<div class="form-group">
|
||
|
<input type="number" name="i_total_price" class="form-control" id="i_total_price" placeholder="Total Amount" readonly>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<button type="submit" id="itemAddBtn" class="btn btn-sm btn-outline-primary w-100 mt-4">Add</button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</form>
|
||
|
</div>
|
||
|
<div class="col-md-7">
|
||
|
<div class="card col-md-12">
|
||
|
<div class="card-body">
|
||
|
<form method="post" action="<?php echo base_url(); ?>admin/inventory/add-new-sales-record/0" enctype="multipart/form-data">
|
||
|
<table id="tbl" class="display table-responsive">
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th width="0%" class="textCenter">S.No</th>
|
||
|
<th class="textCenter">Item</th>
|
||
|
<th class="textCenter">Qty</th>
|
||
|
<th class="textCenter">Unit Price</th>
|
||
|
<th class="textCenter">Total Price</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
</tbody>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
<div class="row mt-3" id="summary" style=" display: none;">
|
||
|
<div class="col-md-8">
|
||
|
<h6>Total : <?= $school_info['currency_symbol'] . '. ' ?><span id="totalPrice">0</span></h6>
|
||
|
</div>
|
||
|
<div class="col-md-4">
|
||
|
<input type="submit" name="addSalesEntry" value="Submit" class="btn w-100 btn-sm btn-outline-success">
|
||
|
</div>
|
||
|
</div>
|
||
|
</form>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</main>
|
||
|
|
||
|
</div>
|
||
|
<script defer src="<?php echo base_url(); ?>assets_admin/js/bootstrap-select.min.js"></script>
|
||
|
|
||
|
|
||
|
<!--End right-top side-->
|
||
|
|
||
|
<!-- <script src="<?php echo base_url(); ?>assets-bustracking/js/jquery-3.2.1.slim.min.js"></script> -->
|
||
|
<script>
|
||
|
$('#contact_number').bind('keyup paste', function() {
|
||
|
this.value = this.value.replace(/[^0-9]/g, '');
|
||
|
});
|
||
|
|
||
|
$("#itemAddBtn").click(function() {
|
||
|
|
||
|
$("#itemForm").validate({
|
||
|
student: {
|
||
|
student: {
|
||
|
required: true
|
||
|
},
|
||
|
item: {
|
||
|
required: true
|
||
|
}
|
||
|
|
||
|
},
|
||
|
messages: {
|
||
|
student: {
|
||
|
required: "Select any student"
|
||
|
},
|
||
|
item: {
|
||
|
required: "Select a item"
|
||
|
}
|
||
|
},
|
||
|
submitHandler: function(form) {
|
||
|
// alert("button");
|
||
|
|
||
|
$("#student").attr('disabled', 'disabled');
|
||
|
// $(".selectpicker[data-id='yourSelect']").addClass("disabled");
|
||
|
|
||
|
// var studentId = $("#itemForm").val();
|
||
|
var studentId = $('#student option:selected').val();
|
||
|
var item = $('#item option:selected').val();
|
||
|
var itemSellingPrice = $('#i_selling_price').val();
|
||
|
var itemTotalPrice = $('#i_total_price').val();
|
||
|
|
||
|
var itemQuantity = $('#i_qty').val();
|
||
|
var itemPurchaseId = $('#i_purchase_id').val();
|
||
|
|
||
|
// console.log(studentId + ' => ' + item + ' => ' + itemSellingPrice + ' => ' + itemTotalPrice + ' => ' + itemQuantity);
|
||
|
|
||
|
var rowCount = $("#tbl tr").length;
|
||
|
rowCount = rowCount;
|
||
|
var trDiv = '';
|
||
|
trDiv += '<tr>';
|
||
|
trDiv += '<td>';
|
||
|
trDiv += rowCount;
|
||
|
trDiv += '</td>';
|
||
|
|
||
|
trDiv += '<td class="text-left">';
|
||
|
var items = <?= json_encode($inventory_items) ?>;
|
||
|
for (var a = 0; a < items.length; a++) {
|
||
|
if (items[a]['id'] == item) {
|
||
|
trDiv += '<input type="hidden" name="itemId[' + rowCount + ']" value="' + items[a]['id'] + '">'
|
||
|
trDiv += items[a]['title'];
|
||
|
}
|
||
|
}
|
||
|
trDiv += '</td>';
|
||
|
|
||
|
trDiv += '<td>';
|
||
|
trDiv += '<input type="hidden" name="itemQty[' + rowCount + ']" value="' + itemQuantity + '">'
|
||
|
trDiv += itemQuantity;
|
||
|
trDiv += '</td>';
|
||
|
|
||
|
trDiv += '<td>';
|
||
|
trDiv += '<input type="hidden" name="purchaseId[' + rowCount + ']" value="' + itemPurchaseId + '">'
|
||
|
trDiv += itemSellingPrice;
|
||
|
trDiv += '</td>';
|
||
|
|
||
|
trDiv += '<td>';
|
||
|
trDiv += '<input type="hidden" name="studentId[' + rowCount + ']" value="' + studentId + '">'
|
||
|
trDiv += '<input type="hidden" name="sellingPrice[' + rowCount + ']" value="' + itemSellingPrice + '">'
|
||
|
|
||
|
trDiv += itemTotalPrice;
|
||
|
trDiv += '</td>';
|
||
|
|
||
|
trDiv += '</tr>';
|
||
|
|
||
|
|
||
|
$('#tbl tr:last').after(trDiv);
|
||
|
var totalPrice = parseFloat($('#totalPrice').text());
|
||
|
var calc = totalPrice + parseFloat(itemSellingPrice);
|
||
|
|
||
|
$('#totalPrice').text(calc);
|
||
|
$("#summary").show();
|
||
|
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
|
||
|
$('#student').on('change', function() {
|
||
|
var students = <?= json_encode($students) ?>;
|
||
|
var items = <?= json_encode($inventory_items) ?>;
|
||
|
var selectedStudent = this.value;
|
||
|
|
||
|
for (var a = 0; a < students.length; a++) {
|
||
|
|
||
|
if (selectedStudent == students[a]['id']) {
|
||
|
var divData = '';
|
||
|
divData += "<option value='' > Select Section </option>";
|
||
|
// console.log(students[a]);
|
||
|
$('#s_class').val(students[a]['course_name']);
|
||
|
$('#s_section').val(students[a]['section_name']);
|
||
|
// s_section
|
||
|
for (var b = 0; b < items.length; b++) {
|
||
|
// console.log(items[b]['course_id'] + ' ========> ' + students[a]['course']);
|
||
|
if ((items[b]['course_id'] == students[a]['course']) || (items[b]['course_id'] == 0)) {
|
||
|
// console.log(items[b]);
|
||
|
divData += "<option value='" + items[b]['id'] + "'>" + items[b]['title'] + "</option>";
|
||
|
}
|
||
|
}
|
||
|
$('#item').empty().append(divData).selectpicker("refresh");
|
||
|
|
||
|
priceDivData = "<option value='' > Select Price </option>";
|
||
|
$('#i_price').empty().append(priceDivData).selectpicker("refresh");
|
||
|
$('#i_qty').val('');
|
||
|
$('#i_purchase_id').val('');
|
||
|
$('#i_selling_price').val('');
|
||
|
$('#i_total_price').val('');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$('#item').on('change', function() {
|
||
|
var items = <?= json_encode($inventory_items) ?>;
|
||
|
var selectedItem = $('#item option:selected').val();
|
||
|
var currencySymbol = '<?= $school_info['currency_symbol'] ?>';
|
||
|
for (var a = 0; a < items.length; a++) {
|
||
|
if (items[a]['id'] == selectedItem) {
|
||
|
if (items[a]['short_label'] != null) {
|
||
|
$('#available-stock').html('Available Stock : ' + items[a]['available_stock'] + ' <small>' + items[a]['short_label'] + '</small>');
|
||
|
} else {
|
||
|
$('#available-stock').html('Available Stock : ' + items[a]['available_stock']);
|
||
|
}
|
||
|
|
||
|
var itemPurchases = items[a]['item_purchases'];
|
||
|
|
||
|
console.log(itemPurchases);
|
||
|
var divData = '';
|
||
|
var sellingPrice = 0;
|
||
|
var itemPurchaseId = 0;
|
||
|
for (var b = 0; b < itemPurchases.length; b++) {
|
||
|
divData += "<option value='" + itemPurchases[b]['id'] + "'>" + currencySymbol + '. ' + itemPurchases[b]['selling_price'] + "</option>";
|
||
|
if (b == 0) {
|
||
|
sellingPrice = itemPurchases[b]['selling_price'];
|
||
|
itemPurchaseId = itemPurchases[b]['id'];
|
||
|
}
|
||
|
}
|
||
|
console.log('Selling Price = ' + sellingPrice);
|
||
|
$('#i_qty').val(1);
|
||
|
$('#i_purchase_id').val(itemPurchaseId);
|
||
|
$('#i_selling_price').val(sellingPrice);
|
||
|
$('#i_total_price').val(sellingPrice * 1);
|
||
|
|
||
|
$('#i_price').empty().append(divData).selectpicker("refresh");
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
$('#i_price').on('change', function() {
|
||
|
var selectedItem = $('#item option:selected').val();
|
||
|
var selectedPurchaseId = $('#i_price option:selected').val();
|
||
|
var items = <?= json_encode($inventory_items) ?>;
|
||
|
var currencySymbol = '<?= $school_info['currency_symbol'] ?>';
|
||
|
|
||
|
for (var a = 0; a < items.length; a++) {
|
||
|
if (items[a]['id'] == selectedItem) {
|
||
|
var itemPurchases = items[a]['item_purchases'];
|
||
|
for (var b = 0; b < itemPurchases.length; b++) {
|
||
|
if (selectedPurchaseId == itemPurchases[b]['id']) {
|
||
|
$('#i_qty').val(1);
|
||
|
$('#i_purchase_id').val(itemPurchases[b]['id']);
|
||
|
$('#i_selling_price').val(itemPurchases[b]['selling_price']);
|
||
|
$('#i_total_price').val(itemPurchases[b]['selling_price'] * 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$('#i_qty').on('change', function() {
|
||
|
var qty_val = $('#i_qty').val();
|
||
|
var amount = $('#i_selling_price').val();
|
||
|
|
||
|
var calculation = parseFloat(qty_val) * parseFloat(amount);
|
||
|
if ($.isNumeric(calculation)) {
|
||
|
$('#i_total_price').val(calculation);
|
||
|
} else {
|
||
|
$('#i_total_price').val("");
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
$('#i_selling_price').on('change', function() {
|
||
|
var qty_val = $('#i_qty').val();
|
||
|
var amount = $('#i_selling_price').val();
|
||
|
|
||
|
var calculation = parseFloat(qty_val) * parseFloat(amount);
|
||
|
if ($.isNumeric(calculation)) {
|
||
|
$('#i_total_price').val(calculation);
|
||
|
} else {
|
||
|
$('#i_total_price').val("");
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
$(document).ready(function() {
|
||
|
$("#summary").hide();
|
||
|
//table js
|
||
|
$('#tbl').DataTable({
|
||
|
paging: false,
|
||
|
ordering: false,
|
||
|
info: false,
|
||
|
"footerCallback": function(row, data, start, end, display) {
|
||
|
//var theDynTdCnt = (theTdCnt - 7);
|
||
|
for (let fi = 4; fi < theTdCnt; fi++) {
|
||
|
var api = this.api(),
|
||
|
data;
|
||
|
|
||
|
// Remove the formatting to get integer data for summation
|
||
|
var intVal = function(i) {
|
||
|
return typeof i === 'string' ?
|
||
|
i.replace(/[\$,]/g, '') * 1 :
|
||
|
typeof i === 'number' ?
|
||
|
i : 0;
|
||
|
};
|
||
|
|
||
|
// Total over all pages
|
||
|
total = api
|
||
|
.column(fi)
|
||
|
.data()
|
||
|
.reduce(function(a, b) {
|
||
|
return intVal(a) + intVal(b);
|
||
|
}, 0);
|
||
|
|
||
|
// Total over this page
|
||
|
pageTotal = api
|
||
|
.column(fi, {
|
||
|
page: 'current'
|
||
|
})
|
||
|
.data()
|
||
|
.reduce(function(a, b) {
|
||
|
return intVal(a) + intVal(b);
|
||
|
}, 0);
|
||
|
|
||
|
$(api.column(fi).footer()).html(
|
||
|
//currency_symbol + ' ' + pageTotal + ' ( ' + currency_symbol + ' ' + total + ' total )'
|
||
|
pageTotal
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
//table js end
|
||
|
let NDate = NepaliFunctions.GetCurrentBsDate();
|
||
|
let todayDate = `${NDate.year}-${NDate.month}-${NDate.day}`;
|
||
|
$('#purchased_on').nepaliDatePicker({
|
||
|
disableAfter: todayDate,
|
||
|
language: 'english',
|
||
|
ndpMonth: true,
|
||
|
ndpYear: true
|
||
|
|
||
|
});
|
||
|
$("#course-section").hide();
|
||
|
|
||
|
});
|
||
|
|
||
|
$('#qty').on('change', function() {
|
||
|
|
||
|
var id_val = $('#qty').val();
|
||
|
var amount = $('#unit_price').val();
|
||
|
var validAmount = /^\d{0,4}(\.\d{0,2})?$/.test(amount);
|
||
|
var validQuality = /^\d{0,4}(\.\d{0,2})?$/.test(id_val);
|
||
|
|
||
|
if (!validAmount || !validQuality) {
|
||
|
alert("Please check the Amount or Quantity");
|
||
|
$('#total_price').val("");
|
||
|
$('#paid_amount').val("");
|
||
|
|
||
|
} else {
|
||
|
var calculation = parseFloat(id_val) * parseFloat(amount);
|
||
|
if ($.isNumeric(calculation)) {
|
||
|
$('#total_price').val(calculation);
|
||
|
$('#paid_amount').val(calculation);
|
||
|
} else {
|
||
|
$('#total_price').val("");
|
||
|
$('#paid_amount').val("");
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$('#total_price').on('change', function() {
|
||
|
$('#paid_amount').val($('#total_price').val());
|
||
|
$('#remaining_amount').val(parseFloat($('#total_price').val()) - parseFloat($('#paid_amount').val()))
|
||
|
});
|
||
|
|
||
|
$('#paid_amount').on('change', function() {
|
||
|
$('#remaining_amount').val(parseFloat($('#total_price').val()) - parseFloat($('#paid_amount').val()))
|
||
|
});
|
||
|
|
||
|
$('#unit_price').on('change', function() {
|
||
|
var id_val = $('#qty').val();
|
||
|
var amount = $('#unit_price').val();
|
||
|
var validAmount = /^\d{0,9}(\.\d{0,7})?$/.test(amount);
|
||
|
var validQuality = /^\d{0,7}(\.\d{0,7})?$/.test(id_val);
|
||
|
|
||
|
if (!validAmount || !validQuality) {
|
||
|
alert("Please check the Amount or Quantity");
|
||
|
$('#total_price').val("");
|
||
|
$('#paid_amount').val("");
|
||
|
$('#selling_price').val("");
|
||
|
$('#remaining_amount').val("");
|
||
|
} else {
|
||
|
var calculation = parseFloat(id_val) * parseFloat(amount);
|
||
|
if ($.isNumeric(calculation)) {
|
||
|
$('#total_price').val(calculation);
|
||
|
$('#paid_amount').val(calculation);
|
||
|
$('#selling_price').val(amount);
|
||
|
$('#remaining_amount').val(calculation - calculation);
|
||
|
} else {
|
||
|
$('#total_price').val("");
|
||
|
$('#paid_amount').val("");
|
||
|
$('#selling_price').val("");
|
||
|
$('#remaining_amount').val("");
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
</script>
|