Files
intranet/resources/views/proyectos/construccion.blade.php
2020-12-01 17:23:13 -03:00

337 lines
12 KiB
PHP

@extends('layout.base')
@section('content')
<div class="panel panel-default">
<div class="panel-heading">
<h3>Construcci&oacute;n Proyecto <a href="{{nUrl('proyectos', 'show', ['proyecto' => $proyecto->id])}}">{{$proyecto->descripcion}}</a></h3>
</div>
<div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading">
<div class="row">
<div class="col-md-2"><b>Estado de Pago</b></div>
<div class="col-md-10"><b>Avance</b></div>
</div>
</div>
<div class="panel-body">
@foreach ($proyecto->avances() as $avance)
<div class="row">
<div class="col-md-2">
@if ($avance->numero == 0)
Anticipo
@else
{{$avance->numero}}
@endif
</div>
<div class="col-md-10">
<div class="progress" style="margin: 2px 0;">
<div class="progress-bar" style="width: {{round($avance->avance * 100, 2)}}%">
<span class="sr-only">{{format('percent', round($avance->avance * 100, 2))}}%</span>
@if ($avance->avance > 0.3)
{{format('percent', round($avance->avance * 100, 2))}}%
@endif
</div>
<div class="progress-bar progress-bar-warning" style="width: {{round(100 - $avance->avance * 100, 2)}}%">
<span class="sr-only">{{format('percent', round(100 - $avance->avance * 100, 2))}}%</span>
@if ($avance->avance <= 0.3)
{{format('percent', round($avance->avance * 100, 2))}}%
@endif
</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th rowspan="2">
Estado de Pago
<a href="{{nUrl('proyectos', 'advance', ['proyecto' => $proyecto->id])}}">
<span class="glyphicon glyphicon-plus"></span>
</a>
</th>
<th colspan="4" class="text-center">Pagado</th>
<th rowspan="2">
Pagar&eacute;
<a href="{{nUrl('pagares', 'add', ['proyecto' => $proyecto->id])}}">
<span class="glyphicon small glyphicon-plus"></span>
</a>
</th>
<th colspan="4" class="text-center">Deuda</th>
</tr>
<tr>
<th>Fecha</th>
<th>Valor</th>
<th>Real</th>
<th>Diferencia</th>
<th>Fecha</th>
<th>Valor</th>
<th>Abonado</th>
<th>Diferencia</th>
<th>Intereses</th>
<th class="small">% Intereses</th>
</tr>
</thead>
<tbody>
<?php $totales = (object) [
'avance' => (object) [
'pagado' => 0,
'real' => 0,
'dif' => 0
],
'deuda' => (object) [
'pagare' => 0,
'abonado' => 0,
'dif' => 0,
'intereses' => 0
],
'dif' => 0,
'dif_real' => 0
] ?>
@foreach ($proyecto->avances() as $i => $avance)
<?php
$totales->avance->pagado += $avance->estado_pago;
$totales->avance->real += $avance->pagado();
if ($avance->pagado() > 0) {
$totales->avance->dif += $avance->pagado() - $avance->estado_pago;
}
if ($avance->pagares()) {
$arr = $avance->pagares();
$totales->deuda->pagare += array_reduce($arr, function($sum, $item) {
return $sum + $item->valor();
});
$totales->deuda->abonado += array_reduce($arr, function($sum, $item) {
return $sum + $item->abonado();
});
$totales->deuda->dif += array_reduce($arr, function($sum, $item) {
return $sum + $item->abonado() - $item->valor();
});
$totales->deuda->intereses += array_reduce($arr, function($sum, $item) {
return $sum + $item->intereses();
});
$totales->dif += array_reduce($arr, function($sum, $item) {
return $sum + $item->valor();
}) - $avance->estado_pago;
}
?>
<tr>
<td>
<a href="{{nUrl('proyectos', 'editar_avance', ['avance' => $avance->id])}}">
@if ($avance->numero == 0)
Anticipo
@else
{{$avance->numero}}</a>
@endif
</a>
</td>
<td>{{format('shortDate', $avance->fecha)}}</td>
<td class="text-right">{{format('ufs', $avance->estado_pago)}}</td>
<td class="text-right">
@if ($avance->pagado() > 0)
{{format('ufs', $avance->pagado())}}
@endif
</td>
<td class="text-right">
@if ($avance->pagado() > 0)
{{format('ufs', $avance->estado_pago - $avance->pagado())}}
@endif
</td>
<td>
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
<a href="{{nUrl('pagares', 'show', ['pagare' => $pagare->id])}}">
{{$pagare->id}} ({{$pagare->moneda()->descripcion}})
</a><br />
@endforeach
@else
--
@endif
</td>
<td>
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
{{format('shortDate', $pagare->fecha)}} ({{$pagare->duracion}})<br />
@endforeach
@endif
</td>
<td class="text-right">
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
{{format('ufs', $pagare->valor())}}<br />
@endforeach
@endif
</td>
<td class="text-right">
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
{{format('ufs', $pagare->abonado())}}<br />
@endforeach
@endif
</td>
<td class="text-right">
@if ($avance->pagare())
{{format('ufs', $pagare->abonado() - $pagare->valor())}}
@endif
</td>
<td class="text-right">
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
{{format('ufs', - $pagare->intereses())}}<br />
@endforeach
@endif
</td>
<td class="text-right small">
@if ($avance->pagares())
@foreach ($avance->pagares() as $pagare)
{{format('percent', round($pagare->intereses() / $pagare->valor() * 100, 2), null, true)}}<br />
@endforeach
@endif
</td>
</tr>
@endforeach
<tr>
<td><b>Total</b></td>
<td></td>
<td class="text-right"><b>{{format('ufs', $totales->avance->pagado)}}</b></td>
<td class="text-right"><b>{{format('ufs', $totales->avance->real)}}</b></td>
<td class="text-right"><b>{{format('ufs', - $totales->avance->dif)}}</b></td>
<td colspan="2"></td>
<td class="text-right"><b>{{format('ufs', $totales->deuda->pagare)}}</b></td>
<td class="text-right"><b>{{format('ufs', $totales->deuda->abonado)}}</b></td>
<td class="text-right"><b>{{format('ufs', $totales->deuda->dif)}}</b></td>
<td class="text-right"><b>{{format('ufs', - $totales->deuda->intereses)}}</b></td>
</tr>
</tbody>
</table>
<div class="panel panel-default">
<div class="panel-heading">
<b>Diferencias en Caja</b>
</div>
<div class="panel-body">
<canvas id="estados_pago"></canvas>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
var estados_pago = []
var pagado = []
var abonado = []
var diferencia = []
var intereses = []
var colores_dif = []
function setUp() {
@foreach ($proyecto->avances() as $avance)
estados_pago.push({{$avance->numero}})
pagado.push(({{$avance->pagado()}}).toFixed(2))
valor = 0
if (diferencia.length > 0) {
valor = parseFloat(diferencia[diferencia.length - 1])
}
valor2 = 0
if (intereses.length > 0) {
valor2 = parseFloat(intereses[intereses.length - 1])
}
@if ($avance->pagares())
<?php $arr = $avance->pagares() ?>
abonado.push({{array_reduce($arr, function($sum, $item) {return $sum + $item->abonado();})}}.toFixed(2))
diferencia.push((valor + {{array_reduce($arr, function($sum, $item) {return $sum + $item->abonado();}) - $avance->pagado()}}).toFixed(2))
intereses.push((valor2 + {{array_reduce($arr, function($sum, $item) {return $sum + $item->intereses();})}}).toFixed(2))
@else
abonado.push(0)
diferencia.push((valor + {{-$avance->pagado()}}).toFixed(2))
intereses.push(valor2.toFixed(2))
@endif
if (diferencia[diferencia.length - 1] < 0) {
colores_dif.push('rgba(255, 0, 0, 1)')
} else {
colores_dif.push('rgba(0, 255, 0, 1)')
}
@endforeach
console.debug(intereses)
}
function formatNumber(number, decimals = 2, dec_sep = ',', thou_sep = '.') {
var arr = ('' + number).split('.')
var num = arr[0]
var dec = arr.length > 1 ? dec_sep + arr[1] : ''
var rgx = /(\d+)(\d{3})/
while (rgx.test(num)) {
num = num.replace(rgx, '$1' + thou_sep + '$2')
}
return num + dec
}
function build() {
var ctx = $('#estados_pago').get(0).getContext('2d')
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: estados_pago,
datasets: [
{
label: 'Abonado por Banco',
data: abonado,
backgroundColor: 'rgba(0, 255, 255, 1)'
},
{
label: 'Pagado a Constructora',
data: pagado,
backgroundColor: 'rgba(0, 0, 255, 1)'
},
{
label: 'Diferencia',
data: diferencia,
backgroundColor: colores_dif
},
{
label: 'Intereses',
data: intereses,
backgroundColor: 'rgba(255, 255, 0, 1)'
}
]
},
options: {
scales: {
yAxes: [{
afterTickToLabelConversion: (axis) => {
$.each(axis.ticks, (i, el) => {
axis.ticks[i] = formatNumber(parseInt(el))
})
return axis
}
}]
},
tooltips: {
callbacks: {
title: (tooltipItem, data) => {
var ep = data.labels[tooltipItem[0].index]
var label = 'Anticipo'
if (ep > 0) {
label = 'EP ' + ep
}
return label
},
label: (tooltipItem, data) => {
var label = data.datasets[tooltipItem.datasetIndex].label || ''
if (label) {
label += ': '
}
label += formatNumber(tooltipItem.yLabel)
return label
}
}
}
}
})
}
$(document).ready(function() {
setUp()
build()
})
</script>
@endpush