ultimatepos/resources/views/report/profit_loss.blade.php

535 lines
27 KiB
PHP

@extends('layouts.app')
@section('title', __('report.profit_loss'))
@section('content')
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 class="tw-text-xl md:tw-text-3xl tw-font-bold tw-text-black">@lang('report.profit_loss')
</h1>
</section>
<!-- Main content -->
<section class="content">
<div class="print_section">
<h2>{{ session()->get('business.name') }} - @lang('report.profit_loss')</h2>
</div>
<div class="row no-print">
<div class="col-md-4 col-xs-12">
<div class="input-group">
<span class="input-group-addon bg-light-blue"><i class="fa fa-map-marker"></i></span>
<select class="form-control select2" id="profit_loss_location_filter">
@foreach ($business_locations as $key => $value)
<option value="{{ $key }}">{{ $value }}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-4 col-xs-12">
<div class="form-group">
<div class="input-group">
<button type="button" class="tw-dw-btn tw-dw-btn-primary tw-text-white tw-dw-btn-sm" id="profit_loss_date_filter">
<span>
<i class="fa fa-calendar"></i> {{ __('messages.filter_by_date') }}
</span>
<i class="fa fa-caret-down"></i>
</button>
</div>
</div>
</div>
<div class="col-md-4 col-xs-12">
<div id="ai-analysis-container" class="ai-analysis-content"></div>
</div>
</div>
<div class="row">
<div id="pl_data_div">
</div>
</div>
<div class="row no-print">
<div class="col-sm-12 tw-mb-2">
<button class="tw-dw-btn tw-dw-btn-primary tw-text-white pull-right" aria-label="Print"
onclick="window.print();">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="icon icon-tabler icons-tabler-outline icon-tabler-printer">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2" />
<path d="M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4" />
<path d="M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z" />
</svg> @lang('messages.print')
</button>
</div>
</div>
<div class="row no-print">
<div class="col-md-12">
<!-- Custom Tabs -->
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
<li class="active">
<a href="#profit_by_products" data-toggle="tab" aria-expanded="true"><i class="fa fa-cubes"
aria-hidden="true"></i> @lang('lang_v1.profit_by_products')</a>
</li>
<li>
<a href="#profit_by_categories" data-toggle="tab" aria-expanded="true"><i class="fa fa-tags"
aria-hidden="true"></i> @lang('lang_v1.profit_by_categories')</a>
</li>
<li>
<a href="#profit_by_brands" data-toggle="tab" aria-expanded="true"><i class="fa fa-diamond"
aria-hidden="true"></i> @lang('lang_v1.profit_by_brands')</a>
</li>
<li>
<a href="#profit_by_locations" data-toggle="tab" aria-expanded="true"><i
class="fa fa-map-marker" aria-hidden="true"></i> @lang('lang_v1.profit_by_locations')</a>
</li>
<li>
<a href="#profit_by_invoice" data-toggle="tab" aria-expanded="true"><i class="fa fa-file-alt"
aria-hidden="true"></i> @lang('lang_v1.profit_by_invoice')</a>
</li>
<li>
<a href="#profit_by_date" data-toggle="tab" aria-expanded="true"><i class="fa fa-calendar"
aria-hidden="true"></i> @lang('lang_v1.profit_by_date')</a>
</li>
<li>
<a href="#profit_by_customer" data-toggle="tab" aria-expanded="true"><i class="fa fa-user"
aria-hidden="true"></i> @lang('lang_v1.profit_by_customer')</a>
</li>
<li>
<a href="#profit_by_day" data-toggle="tab" aria-expanded="true"><i class="fa fa-calendar"
aria-hidden="true"></i> @lang('lang_v1.profit_by_day')</a>
</li>
<li>
<a href="#profit_by_service_staff" data-toggle="tab" aria-expanded="true"><i class="fa fa-user-secret"
aria-hidden="true"></i> @lang('lang_v1.profit_by_service_staff')</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="profit_by_products">
@include('report.partials.profit_by_products')
</div>
<div class="tab-pane" id="profit_by_categories">
@include('report.partials.profit_by_categories')
</div>
<div class="tab-pane" id="profit_by_brands">
@include('report.partials.profit_by_brands')
</div>
<div class="tab-pane" id="profit_by_locations">
@include('report.partials.profit_by_locations')
</div>
<div class="tab-pane" id="profit_by_invoice">
@include('report.partials.profit_by_invoice')
</div>
<div class="tab-pane" id="profit_by_date">
@include('report.partials.profit_by_date')
</div>
<div class="tab-pane" id="profit_by_customer">
@include('report.partials.profit_by_customer')
</div>
<div class="tab-pane" id="profit_by_service_staff">
@include('report.partials.profit_by_service_staff')
</div>
<div class="tab-pane" id="profit_by_day">
</div>
</div>
</div>
</div>
</div>
</section>
<!-- /.content -->
@stop
@section('javascript')
<script src="{{ asset('js/report.js?v=' . $asset_v) }}"></script>
<script type="text/javascript">
$(document).ready(function() {
profit_by_products_table = $('#profit_by_products_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/product",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'product',
name: 'product'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) : 0;
}
$('#profit_by_products_table .footer_total').html(__currency_trans_from_en(
total_profit));
}
});
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
var target = $(e.target).attr('href');
if (target == '#profit_by_categories') {
if (typeof profit_by_categories_datatable == 'undefined') {
profit_by_categories_datatable = $('#profit_by_categories_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/category",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'category',
name: 'C.name'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_categories_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_categories_datatable.ajax.reload();
}
} else if (target == '#profit_by_brands') {
if (typeof profit_by_brands_datatable == 'undefined') {
profit_by_brands_datatable = $('#profit_by_brands_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/brand",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'brand',
name: 'B.name'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_brands_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_brands_datatable.ajax.reload();
}
} else if (target == '#profit_by_locations') {
if (typeof profit_by_locations_datatable == 'undefined') {
profit_by_locations_datatable = $('#profit_by_locations_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/location",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'location',
name: 'L.name'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_locations_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_locations_datatable.ajax.reload();
}
} else if (target == '#profit_by_invoice') {
if (typeof profit_by_invoice_datatable == 'undefined') {
profit_by_invoice_datatable = $('#profit_by_invoice_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/invoice",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'invoice_no',
name: 'sale.invoice_no'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_invoice_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_invoice_datatable.ajax.reload();
}
} else if (target == '#profit_by_date') {
if (typeof profit_by_date_datatable == 'undefined') {
profit_by_date_datatable = $('#profit_by_date_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/date",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'transaction_date',
name: 'sale.transaction_date'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_date_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_date_datatable.ajax.reload();
}
} else if (target == '#profit_by_customer') {
if (typeof profit_by_customers_table == 'undefined') {
profit_by_customers_table = $('#profit_by_customer_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/customer",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'customer',
name: 'CU.name'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_customer_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_customers_table.ajax.reload();
}
} else if (target == '#profit_by_service_staff') {
if (typeof profit_by_service_staffs_table == 'undefined') {
profit_by_service_staffs_table = $('#profit_by_service_staff_table').DataTable({
processing: true,
serverSide: true,
fixedHeader:false,
"ajax": {
"url": "/reports/get-profit/service_staff",
"data": function(d) {
d.start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
d.end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
d.location_id = $('#profit_loss_location_filter').val();
}
},
columns: [{
data: 'staff_name',
name: 'U.first_name'
},
{
data: 'gross_profit',
"searchable": false
},
],
footerCallback: function(row, data, start, end, display) {
var total_profit = 0;
for (var r in data) {
total_profit += $(data[r].gross_profit).data('orig-value') ?
parseFloat($(data[r].gross_profit).data('orig-value')) :
0;
}
$('#profit_by_service_staff_table .footer_total').html(
__currency_trans_from_en(total_profit));
},
});
} else {
profit_by_service_staffs_table.ajax.reload();
}
} else if (target == '#profit_by_day') {
var start_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.startDate.format('YYYY-MM-DD');
var end_date = $('#profit_loss_date_filter')
.data('daterangepicker')
.endDate.format('YYYY-MM-DD');
var location_id = $('#profit_loss_location_filter').val();
var url = '/reports/get-profit/day?start_date=' + start_date + '&end_date=' + end_date +
'&location_id=' + location_id;
$.ajax({
url: url,
dataType: 'html',
success: function(result) {
$('#profit_by_day').html(result);
profit_by_days_table = $('#profit_by_day_table').DataTable({
"searching": false,
'paging': false,
'ordering': false,
});
var total_profit = sum_table_col($('#profit_by_day_table'),
'gross-profit');
$('#profit_by_day_table .footer_total').text(total_profit);
__currency_convert_recursively($('#profit_by_day_table'));
},
});
} else if (target == '#profit_by_products') {
profit_by_products_table.ajax.reload();
}
$("a.btn").removeClass("btn btn-default buttons-excel buttons-html5");
});
});
</script>
@endsection