|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/erp.theinteractive.co.in/resources/views/bill/ |
Upload File : |
@extends('layouts.admin')
@section('page-title')
{{__('Bill Create')}}
@endsection
@section('breadcrumb')
<li class="breadcrumb-item"><a href="{{route('dashboard')}}">{{__('Dashboard')}}</a></li>
<li class="breadcrumb-item"><a href="{{route('bill.index')}}">{{__('Bill')}}</a></li>
<li class="breadcrumb-item">{{__('Bill Create')}}</li>
@endsection
@push('script-page')
<script src="{{asset('js/jquery-ui.min.js')}}"></script>
<script src="{{asset('js/jquery.repeater.min.js')}}"></script>
<script src="{{ asset('js/jquery-searchbox.js') }}"></script>
<script>
var selector = "body";
if ($(selector + " .repeater").length) {
var $dragAndDrop = $("body .repeater tbody").sortable({
handle: '.sort-handler'
});
var $repeater = $(selector + ' .repeater').repeater({
initEmpty: false,
defaultValues: {
'status': 1
},
show: function () {
$(this).slideDown();
var file_uploads = $(this).find('input.multi');
if (file_uploads.length) {
$(this).find('input.multi').MultiFile({
max: 3,
accept: 'png|jpg|jpeg',
max_size: 2048
});
}
// for item SearchBox ( this function is custom Js )
JsSearchBox();
$('.select2').select2();
},
hide: function (deleteElement) {
if (confirm('Are you sure you want to delete this element?')) {
$(this).slideUp(deleteElement);
$(this).remove();
var inputs = $(".amount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
$('.subTotal').html(subTotal.toFixed(2));
$('.totalAmount').html(subTotal.toFixed(2));
}
},
ready: function (setIndexes) {
$dragAndDrop.on('drop', setIndexes);
},
isFirstItemUndeletable: true
});
var value = $(selector + " .repeater").attr('data-value');
if (typeof value != 'undefined' && value.length != 0) {
value = JSON.parse(value);
$repeater.setList(value);
}
}
$(document).on('change', '#vender', function () {
$('#vender_detail').removeClass('d-none');
$('#vender_detail').addClass('d-block');
$('#vender-box').removeClass('d-block');
$('#vender-box').addClass('d-none');
var id = $(this).val();
var url = $(this).data('url');
$.ajax({
url: url,
type: 'POST',
headers: {
'X-CSRF-TOKEN': jQuery('#token').val()
},
data: {
'id': id
},
cache: false,
success: function (data) {
if (data != '') {
$('#vender_detail').html(data);
} else {
$('#vender-box').removeClass('d-none');
$('#vender-box').addClass('d-block');
$('#vender_detail').removeClass('d-block');
$('#vender_detail').addClass('d-none');
}
},
});
});
$(document).on('click', '#remove', function () {
$('#vender-box').removeClass('d-none');
$('#vender-box').addClass('d-block');
$('#vender_detail').removeClass('d-block');
$('#vender_detail').addClass('d-none');
})
$(document).on('change', '.item', function () {
var iteams_id = $(this).val();
var url = $(this).data('url');
var el = $(this);
$.ajax({
url: url,
type: 'POST',
headers: {
'X-CSRF-TOKEN': jQuery('#token').val()
},
data: {
'product_id': iteams_id
},
cache: false,
success: function (data) {
var item = JSON.parse(data);
// console.log(item)
$(el.parent().parent().find('.quantity')).val(1);
$(el.parent().parent().find('.price')).val(item.product.purchase_price);
$(el.parent().parent().parent().find('.pro_description')).val(item.product.description);
var taxes = '';
var tax = [];
var totalItemTaxRate = 0;
if (item.taxes == 0) {
taxes += '-';
} else {
for (var i = 0; i < item.taxes.length; i++) {
taxes += '<span class="badge bg-primary mt-1 mr-2">' + item.taxes[i].name + ' ' + '(' + item.taxes[i].rate + '%)' + '</span>';
tax.push(item.taxes[i].id);
totalItemTaxRate += parseFloat(item.taxes[i].rate);
}
}
var itemTaxPrice = parseFloat((totalItemTaxRate / 100) * (item.product.purchase_price * 1));
$(el.parent().parent().find('.itemTaxPrice')).val(itemTaxPrice.toFixed(2));
$(el.parent().parent().find('.itemTaxRate')).val(totalItemTaxRate.toFixed(2));
$(el.parent().parent().find('.taxes')).html(taxes);
$(el.parent().parent().find('.tax')).val(tax);
$(el.parent().parent().find('.unit')).html(item.unit);
$(el.parent().parent().find('.discount')).val(0);
// $(el.parent().parent().find('.amount')).html(item.totalAmount);
var inputs = $(".amount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
var accountinputs = $(".accountamount");
var accountSubTotal = 0;
for (var i = 0; i < accountinputs.length; i++)
{
var currentInputValue = parseFloat(accountinputs[i].innerHTML);
if (!isNaN(currentInputValue))
{
accountSubTotal += currentInputValue;
}
}
var totalItemPrice = 0;
var priceInput = $('.price');
for (var j = 0; j < priceInput.length; j++) {
totalItemPrice += parseFloat(priceInput[j].value);
}
var totalItemTaxPrice = 0;
var itemTaxPriceInput = $('.itemTaxPrice');
for (var j = 0; j < itemTaxPriceInput.length; j++) {
totalItemTaxPrice += parseFloat(itemTaxPriceInput[j].value);
$(el.parent().parent().find('.amount')).html(parseFloat(item.totalAmount)+parseFloat(itemTaxPriceInput[j].value));
}
var totalItemDiscountPrice = 0;
var itemDiscountPriceInput = $('.discount');
for (var k = 0; k < itemDiscountPriceInput.length; k++) {
totalItemDiscountPrice += parseFloat(itemDiscountPriceInput[k].value);
}
$('.subTotal').html((totalItemPrice+accountSubTotal).toFixed(2));
$('.totalTax').html(totalItemTaxPrice.toFixed(2));
$('.totalAmount').html((parseFloat(totalItemPrice) - parseFloat(totalItemDiscountPrice) + parseFloat(totalItemTaxPrice)).toFixed(2));
},
});
});
$(document).on('keyup', '.quantity', function () {
var quntityTotalTaxPrice = 0;
var el = $(this).parent().parent().parent().parent();
var quantity = $(this).val();
var price = $(el.find('.price')).val();
var discount = $(el.find('.discount')).val();
if(discount.length <= 0)
{
discount = 0 ;
}
var totalItemPrice = (quantity * price) - discount;
var amount = (totalItemPrice);
var totalItemTaxRate = $(el.find('.itemTaxRate')).val();
var itemTaxPrice = parseFloat((totalItemTaxRate / 100) * (totalItemPrice));
$(el.find('.itemTaxPrice')).val(itemTaxPrice.toFixed(2));
$(el.find('.amount')).html(parseFloat(itemTaxPrice)+parseFloat(amount));
var totalItemTaxPrice = 0;
var itemTaxPriceInput = $('.itemTaxPrice');
for (var j = 0; j < itemTaxPriceInput.length; j++) {
totalItemTaxPrice += parseFloat(itemTaxPriceInput[j].value);
}
var totalItemPrice = 0;
var inputs_quantity = $(".quantity");
var priceInput = $('.price');
for (var j = 0; j < priceInput.length; j++) {
totalItemPrice += (parseFloat(priceInput[j].value) * parseFloat(inputs_quantity[j].value));
}
// var totalAccount = 0;
// var accountInput = $('.accountAmount');
// for (var j = 0; j < accountInput.length; j++) {
// if(typeof accountInput[j].value != 'undefined')
// {
// var accountInputPrice = accountInput[j].value;
// }
// else {
// var accountInputPrice = 0;
// }
// totalAccount += (parseFloat(accountInputPrice));
// }
var totalAccount = 0;
var accountInput = $('.accountAmount');
for (var j = 0; j < accountInput.length; j++) {
if (typeof accountInput[j].value != 'undefined') {
var accountInputPrice = parseFloat(accountInput[j].value);
if (isNaN(accountInputPrice)) {
totalAccount = 0;
} else {
totalAccount += accountInputPrice;
}
}
}
var inputs = $(".amount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
console.log(totalAccount)
var sumAmount = totalItemPrice + totalAccount;
$('.subTotal').html((sumAmount).toFixed(2));
$('.totalTax').html(totalItemTaxPrice.toFixed(2));
$('.totalAmount').html((parseFloat(subTotal)+totalAccount).toFixed(2));
})
$(document).on('keyup change', '.price', function () {
var el = $(this).parent().parent().parent().parent();
var price = $(this).val();
var quantity = $(el.find('.quantity')).val();
var discount = $(el.find('.discount')).val();
if(discount.length <= 0)
{
discount = 0 ;
}
var totalItemPrice = (quantity * price)-discount;
var amount = (totalItemPrice);
var totalItemTaxRate = $(el.find('.itemTaxRate')).val();
var itemTaxPrice = parseFloat((totalItemTaxRate / 100) * (totalItemPrice));
$(el.find('.itemTaxPrice')).val(itemTaxPrice.toFixed(2));
$(el.find('.amount')).html(parseFloat(itemTaxPrice)+parseFloat(amount));
var totalItemTaxPrice = 0;
var itemTaxPriceInput = $('.itemTaxPrice');
for (var j = 0; j < itemTaxPriceInput.length; j++) {
totalItemTaxPrice += parseFloat(itemTaxPriceInput[j].value);
}
var totalItemPrice = 0;
var inputs_quantity = $(".quantity");
var priceInput = $('.price');
for (var j = 0; j < priceInput.length; j++) {
totalItemPrice += (parseFloat(priceInput[j].value) * parseFloat(inputs_quantity[j].value));
}
var totalAccount = 0;
var accountInput = $('.accountAmount');
for (var j = 0; j < accountInput.length; j++) {
if (typeof accountInput[j].value != 'undefined') {
var accountInputPrice = parseFloat(accountInput[j].value);
if (isNaN(accountInputPrice)) {
totalAccount = 0;
} else {
totalAccount += accountInputPrice;
}
}
}
var inputs = $(".amount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
$('.subTotal').html((totalItemPrice+totalAccount).toFixed(2));
$('.totalTax').html(totalItemTaxPrice.toFixed(2));
$('.totalAmount').html((parseFloat(subTotal)+totalAccount).toFixed(2));
})
$(document).on('keyup change', '.discount', function () {
var el = $(this).parent().parent().parent();
var discount = $(this).val();
if(discount.length <= 0)
{
discount = 0 ;
}
var price = $(el.find('.price')).val();
var quantity = $(el.find('.quantity')).val();
var totalItemPrice = (quantity * price) - discount;
var amount = (totalItemPrice);
var totalItemTaxRate = $(el.find('.itemTaxRate')).val();
var itemTaxPrice = parseFloat((totalItemTaxRate / 100) * (totalItemPrice));
$(el.find('.itemTaxPrice')).val(itemTaxPrice.toFixed(2));
$(el.find('.amount')).html(parseFloat(itemTaxPrice)+parseFloat(amount));
var totalItemTaxPrice = 0;
var itemTaxPriceInput = $('.itemTaxPrice');
for (var j = 0; j < itemTaxPriceInput.length; j++) {
totalItemTaxPrice += parseFloat(itemTaxPriceInput[j].value);
}
var totalItemPrice = 0;
var inputs_quantity = $(".quantity");
var priceInput = $('.price');
for (var j = 0; j < priceInput.length; j++) {
totalItemPrice += (parseFloat(priceInput[j].value) * parseFloat(inputs_quantity[j].value));
}
var inputs = $(".amount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
var totalItemDiscountPrice = 0;
var itemDiscountPriceInput = $('.discount');
for (var k = 0; k < itemDiscountPriceInput.length; k++) {
totalItemDiscountPrice += parseFloat(itemDiscountPriceInput[k].value);
}
var totalAccount = 0;
var accountInput = $('.accountAmount');
for (var j = 0; j < accountInput.length; j++) {
if (typeof accountInput[j].value != 'undefined') {
var accountInputPrice = parseFloat(accountInput[j].value);
if (isNaN(accountInputPrice)) {
totalAccount = 0;
} else {
totalAccount += accountInputPrice;
}
}
}
// $('.subTotal').html(totalItemPrice.toFixed(2));
$('.subTotal').html((totalItemPrice+totalAccount).toFixed(2));
$('.totalTax').html(totalItemTaxPrice.toFixed(2));
$('.totalAmount').html((parseFloat(subTotal)+totalAccount).toFixed(2));
$('.totalDiscount').html(totalItemDiscountPrice.toFixed(2));
})
$(document).on('keyup change', '.accountAmount', function () {
var el1 = $(this).parent().parent().parent().parent();
var el = $(this).parent().parent().parent().parent().parent();
var quantityDiv = $(el.find('.quantity'));
var priceDiv = $(el.find('.price'));
var discountDiv = $(el.find('.discount'));
var itemSubTotal=0;
for (var p = 0; p < priceDiv.length; p++) {
var quantity=quantityDiv[p].value;
var price=priceDiv[p].value;
var discount=discountDiv[p].value;
if(discount.length <= 0)
{
discount = 0 ;
}
itemSubTotal += (quantity*price) - (discount);
}
// var totalItemTaxPrice = 0;
// var itemTaxPriceInput = $('.itemTaxPrice');
// for (var j = 0; j < itemTaxPriceInput.length; j++) {
//
// totalItemTaxPrice += parseFloat(itemTaxPriceInput[j].value);
//
// }
var totalItemTaxPrice = 0;
var itemTaxPriceInput = $('.itemTaxPrice');
for (var j = 0; j < itemTaxPriceInput.length; j++) {
var parsedValue = parseFloat(itemTaxPriceInput[j].value);
if (!isNaN(parsedValue)) {
totalItemTaxPrice += parsedValue;
}
}
var amount = $(this).val();
el1.find('.accountamount').html(amount);
var totalAccount = 0;
var accountInput = $('.accountAmount');
for (var j = 0; j < accountInput.length; j++) {
totalAccount += (parseFloat(accountInput[j].value) );
}
var inputs = $(".accountamount");
var subTotal = 0;
for (var i = 0; i < inputs.length; i++) {
subTotal = parseFloat(subTotal) + parseFloat($(inputs[i]).html());
}
// console.log(subTotal)
$('.subTotal').text((totalAccount+itemSubTotal).toFixed(2));
$('.totalAmount').text((parseFloat((subTotal + itemSubTotal) + (totalItemTaxPrice))).toFixed(2));
})
var vendorId = '{{$vendorId}}';
if (vendorId > 0) {
$('#vender').val(vendorId).change();
}
</script>
<script>
$(document).on('click', '[data-repeater-delete]', function () {
$(".price").change();
$(".discount").change();
});
</script>
@endpush
@section('content')
<div class="row">
{{ Form::open(array('url' => 'bill','class'=>'w-100')) }}
<div class="col-12">
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="form-group" id="vender-box">
{{ Form::label('vender_id', __('Vendor'),['class'=>'form-label']) }}
{{ Form::select('vender_id', $venders,$vendorId, array('class' => 'form-control select','id'=>'vender','data-url'=>route('bill.vender'),'required'=>'required')) }}
</div>
<div id="vender_detail" class="d-none">
</div>
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-6">
<div class="form-group">
{{ Form::label('bill_date', __('Bill Date'),['class'=>'form-label']) }}
{{Form::date('bill_date',null,array('class'=>'form-control','required'=>'required'))}}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ Form::label('due_date', __('Due Date'),['class'=>'form-label']) }}
{{Form::date('due_date',null,array('class'=>'form-control','required'=>'required'))}}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ Form::label('bill_number', __('Bill Number'),['class'=>'form-label']) }}
<input type="text" class="form-control" value="{{$bill_number}}" readonly>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ Form::label('category_id', __('Category'),['class'=>'form-label']) }}
{{ Form::select('category_id', $category,null, array('class' => 'form-control select')) }}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{{ Form::label('order_number', __('Order Number'),['class'=>'form-label']) }}
{{ Form::number('order_number', '', array('class' => 'form-control' , 'placeholder'=>__('Enter Order Number'))) }}
</div>
</div>
@if(!$customFields->isEmpty())
<div class="col-md-6">
<div class="tab-pane fade show" id="tab-2" role="tabpanel">
@include('customFields.formBuilder')
</div>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12">
<h5 class="d-inline-block mb-4">{{__('Product & Services')}}</h5>
<div class="card repeater">
<div class="item-section py-2">
<div class="row justify-content-between align-items-center">
<div class="col-md-12 d-flex align-items-center justify-content-between justify-content-md-end">
<div class="all-button-box me-2">
<a href="#" data-repeater-create="" class="btn btn-primary" data-bs-toggle="modal" data-target="#add-bank">
<i class="ti ti-plus"></i> {{__('Add Item')}}
</a>
</div>
</div>
</div>
</div>
<div class="card-body table-border-style">
<div class="table-responsive">
<table class="table datatable" data-repeater-list="items" id="sortable-table">
<thead>
<tr>
<th width="20%">{{__('Items')}}</th>
<th>{{__('Quantity')}}</th>
<th>{{__('Price')}} </th>
<th>{{__('Discount')}}</th>
<th>{{__('Tax')}} (%)</th>
<th class="text-end">{{__('Amount')}}
<br><small class="text-danger font-bold">{{__('after tax & discount')}}</small>
</th>
<th></th>
</tr>
</thead>
<tbody class="ui-sortable" data-repeater-item>
<tr>
<td width="25%" class="form-group pt-0">
{{ Form::select('item', $product_services,'', array('class' => 'form-control select2 item ','data-url'=>route('bill.product'))) }}
</td>
<td>
<div class="form-group price-input input-group search-form">
{{ Form::text('quantity','', array('class' => 'form-control quantity','placeholder'=>__('Qty'))) }}
<span class="unit input-group-text bg-transparent"></span>
</div>
</td>
<td>
<div class="form-group price-input input-group search-form">
{{ Form::text('price','', array('class' => 'form-control price','placeholder'=>__('Price'))) }}
<span class="input-group-text bg-transparent">{{\Auth::user()->currencySymbol()}}</span>
</div>
</td>
<td>
<div class="form-group price-input input-group search-form">
{{ Form::text('discount','', array('class' => 'form-control discount','placeholder'=>__('Discount'))) }}
<span class="input-group-text bg-transparent">{{\Auth::user()->currencySymbol()}}</span>
</div>
</td>
<td>
<div class="form-group">
<div class="input-group">
<div class="taxes"></div>
{{ Form::hidden('tax','', array('class' => 'form-control tax')) }}
{{ Form::hidden('itemTaxPrice','', array('class' => 'form-control itemTaxPrice')) }}
{{ Form::hidden('itemTaxRate','', array('class' => 'form-control itemTaxRate')) }}
</div>
</div>
</td>
<td class="text-end amount">
0.00
</td>
<td>
@can('delete proposal product')
<a href="#" class="ti ti-trash text-white repeater-action-btn bg-danger ms-2" data-repeater-delete></a>
@endcan
</td>
</tr>
<tr>
<td class="form-group">
{{-- {{ Form::select('chart_account_id', $chartAccounts,'', array('class' => 'form-control select2 js-searchBox')) }} --}}
<select name="chart_account_id" class="form-control">
@foreach ($chartAccounts as $key => $chartAccount)
<option value="{{ $key }}" class="subAccount">{{ $chartAccount}}</option>
@foreach ($subAccounts as $subAccount)
@if ($key == $subAccount['account'])
<option value="{{ $subAccount['id'] }}" class="ms-5"> {{ $subAccount['name'] }}</option>
@endif
@endforeach
@endforeach
</select>
</td>
<td class="form-group">
<div class="input-group">
{{ Form::text('amount','', array('class' => 'form-control accountAmount','placeholder'=>__('Amount'))) }}
<span class="input-group-text bg-transparent">{{\Auth::user()->currencySymbol()}}</span>
</div>
</td>
<td colspan="2" class="form-group">
{{ Form::textarea('description', null, ['class'=>'form-control pro_description','rows'=>'1','placeholder'=>__('Description')]) }}
</td>
<td></td>
{{-- <td colspan="5"></td>--}}
<td class="text-end accountamount">
0.00
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td></td>
<td><strong>{{__('Sub Total')}} ({{\Auth::user()->currencySymbol()}})</strong></td>
<td class="text-end subTotal">0.00</td>
<td></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td></td>
<td><strong>{{__('Discount')}} ({{\Auth::user()->currencySymbol()}})</strong></td>
<td class="text-end totalDiscount">0.00</td>
<td></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td></td>
<td><strong>{{__('Tax')}} ({{\Auth::user()->currencySymbol()}})</strong></td>
<td class="text-end totalTax">0.00</td>
<td></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td class="blue-text"><strong>{{__('Total Amount')}} ({{\Auth::user()->currencySymbol()}})</strong></td>
<td class="blue-text text-end totalAmount">0.00</td>
<td></td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<input type="button" value="{{__('Cancel')}}" onclick="location.href = '{{route("bill.index")}}';" class="btn btn-light">
<input type="submit" value="{{__('Create')}}" class="btn btn-primary">
</div>
{{ Form::close() }}
</div>
@endsection