| Current Path : /var/www/html/crm/views/product/ |
| Current File : /var/www/html/crm/views/product/stockalertlist.php |
<?php
use yii\helpers\Url;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use app\assets\DatatableAsset;
use app\models\Vendor;
use app\models\Menu;
use app\models\Product;
use app\models\Brand;
use app\models\StockLog;
DatatableAsset::register($this);
$Menu = new Menu();
$Vendor = new Vendor();
$StockLog = new StockLog();
$this->title = $Menu->getmenutitle($menu_id);
$this->registerCss('.table tbody td{vertical-align:middle;height:60px;}');
$this->registerJs("setleftmenu(84, '', '');");
ini_set('max_execution_time', 3000);
?>
<div class="kt-subheader kt-grid__item" id="kt_subheader">
<div class="kt-container kt-container--fluid ">
<div class="kt-subheader__main">
<h3 class="kt-subheader__title"><?= $this->title ?></h3>
<div class="kt-subheader__breadcrumbs">
<?= $Menu->getbreadcrumbs($menu_id, ''); ?>
<span class="kt-subheader__breadcrumbs-separator"></span>
<span class="kt-subheader__breadcrumbs-link"><?= $this->title ?></span>
</div>
</div>
</div>
</div>
<div class="kt-container kt-container--fluid kt-grid__item kt-grid__item--fluid">
<?php $form = ActiveForm::begin(['action' => [Yii::$app->controller->action->id], 'method' => 'get', 'options' => ['class' => '']]); ?>
<div class="kt-portlet">
<div class="kt-portlet__body">
<div class="row">
<div class="col-3">
<?php
echo Html::dropDownList('search_vendor', $search_vendor, ArrayHelper::map(Vendor::find()->where(['=', 'status', '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
'prompt' => '- Select vendor -',
'data-live-search' => 'true',
'class' => 'form-control kt-selectpicker',
'id' => 'search_vendor',
'onchange' => 'changevendor()',]);
?>
</div>
<div class="col-3">
<?php
$brandArr = [];
if (!empty($search_vendor))
$brandArr = ArrayHelper::map(Brand::find()->where(['status' => '1'])->andwhere(['sme_id' => $search_vendor])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
echo Html::dropDownList('search_brand', $search_brand, $brandArr, [
'title' => '- Select brand -',
'data-live-search' => 'true',
'class' => 'form-control kt-selectpicker',
'id' => 'search_brand', 'multiple' => true]);
?>
</div>
<div class="col-3">
<input type="text" class="form-control" value="<?= $search_keyword; ?>" name="search_keyword" placeholder="Search by product name">
</div>
<div class="col-2">
<?= Html::submitButton('Search', ['class' => 'btn btn-brand']) ?>
<?= Html::a('Reset', ['stockalertlist'], ['class' => 'ml-1 btn btn-outline-brand']) ?>
</div>
</div>
</div>
</div>
<?php ActiveForm::end(); ?>
<?php
if (!empty($search_vendor)) {
$dateArr = [];
$beginning_weekdate = date('Y-m-d');
$end_weekdate = date('Y-m-d');
for ($x = 0; $x < 4; $x++) {
$end_weekdate = date('Y-m-d', strtotime('last Sunday', strtotime($end_weekdate)));
$beginning_weekdate = date('Y-m-d', strtotime('-6 day', strtotime($end_weekdate)));
$dateArr2 = ['start' => $beginning_weekdate, 'end' => $end_weekdate];
$dateArr[] = $dateArr2;
}
$dateArr = array_reverse($dateArr);
?>
<div class="kt-portlet">
<div class="kt-portlet__body">
<form autocomplete="off">
<table class="table table-striped table-bordered">
<thead>
<tr class="thead-dark">
<th width="1%" rowspan="2">#</th>
<th rowspan="2">Product Name</th>
<th colspan="4" class="text-center">Past 4 weeks sales</th>
<th width="10%" rowspan="2" class="text-center">Current Balance</th>
<th width="10%" rowspan="2">Stock Alert</th>
</tr>
<tr class="thead-dark">
<?php
if (!empty($dateArr)) {
foreach ($dateArr as $date) {
echo '<th width="10%" class="text-center">' . date("d.m", strtotime($date['start'])) . ' → ' . date("d.m", strtotime($date['end'])) . '</th>';
}
}
?>
</tr>
</thead>
<tbody>
<?php
$query = Product::find()->where(['=', 'status', '1'])->andwhere(['=', 'vendor_id', $search_vendor])->andwhere(['LIKE', 'name', $search_keyword]);
if (!empty($search_brand))
$query->andwhere(['IN', 'brand_id', $search_brand]);
$query->orderBy(['name' => SORT_ASC]);
$model = $query->asArray()->all();
if (!empty($model)) {
$count = 0;
foreach ($model as $row) {
$count++;
echo '<tr><td>' . $count . '</td><td>' . $row['name'] . '</td>';
if (!empty($dateArr)) {
foreach ($dateArr as $date) {
$offline_sales = Yii::$app->db->createCommand("SELECT SUM(quantity) FROM (" .
Yii::$app->sales->getProductOfflineSalesQuery('', $date['start'], $date['end'], $row['id']) . ") t")->queryScalar();
$online_sales = Yii::$app->db->createCommand("SELECT SUM(quantity) FROM orders WHERE
product_id=" . $row['id'] . " AND
order_status='completed' AND
order_date BETWEEN '" . $date['start'] . "' AND '" . $date['end'] . "'")->queryScalar();
$total_sales = $offline_sales + $online_sales;
echo '<td>' . number_format($total_sales) . '</td>';
}
}
echo '<td>' . $StockLog->balancestock($row['id'], '') . '</td>
<td>
<input type="hidden" class="product_id" value="' . $row['id'] . '">
<input type="text" class="form-control" id="stock_alert_' . $row['id'] . '" value="' . $row['stock_alert'] . '">
</td>
</tr>';
}
}
?>
</tbody>
</table>
</form>
<div class="text-right"><button class="btn btn-brand" onclick="updatestockalert()">Update stock alert</button></div>
</div>
</div>
<?php } ?>
</div>
<script>
function changevendor() {
var sme_id = $('#search_vendor').val();
if (sme_id !== '') {
$.ajax({
url: "index.php?r=product/getbrandlist",
method: "POST",
data: {"sme_id": sme_id},
success: function (response) {
$('#search_brand').find('option').remove();
$("#search_brand").append(response);
$('#search_brand').selectpicker('refresh');
},
});
}
}
function updatestockalert() {
var status = 'success';
$('.product_id').each(function () {
var product_id = $(this).val();
var stock_alert = $('#stock_alert_' + product_id).val();
$.ajax({
url: "index.php?r=product/updatestockalert",
method: "POST",
data: {"product_id": product_id, "stock_alert": stock_alert},
async: false,
success: function (response) {
if (response === 'failed')
status = 'failed';
}
});
});
if (status === 'success') {
swal.fire({
position: 'center-center',
type: 'success',
title: 'Stock alert has been updated',
showConfirmButton: false,
timer: 2000,
}).then(function (result) {
location.reload();
});
} else {
swal.fire({
position: 'center-center',
type: 'error',
title: 'Stock alert failed to updated. Please try again.',
showConfirmButton: false,
timer: 2000,
}).then(function (result) {
location.reload();
});
}
}
</script>