<?php
namespace App\Controller;

use App\Definition\Controller;
use Incoviba\old\Venta\Cuota;
use Incoviba\old\Venta\EstadoPago;
use Carbon\Carbon;
use Incoviba\old\Venta\Pie;
use Incoviba\old\Venta\Pago;
use Incoviba\old\Common\Banco;

class Cuotas
{
	use Controller;

	protected static function setDefault()
	{
		self::$default = view('construccion');
	}
	public static function show()
	{
		$id = get('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);

		return view('ventas.pies.cuotas.show', compact('cuota'));
	}
	public static function edit()
	{
		$id = get('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);
		return view('ventas.pies.cuotas.edit', compact('cuota'));
	}
	public static function editar()
	{
		$id = get('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);

		$cuota->numero = post('numero');
		$cuota->{'valor_$'} = post('valor');
		$banco = \Model::factory(\Incoviba\old\Common\Banco::class)->where('nombre', post('banco'))->findOne();
		if ($banco) {
			$cuota->banco = $banco->id;
		} else {
			$cuota->banco = 0;
		}
		$f = \Carbon\Carbon::createFromDate(post('year'), post('month'), post('day'), config('app.timezone'));
		$cuota->fecha = $f->format('Y-m-d');
		$pago = $cuota->pago();
		$pago->valor = post('valor');
		$pago->banco = $banco->id;
		$pago->identificador = post('identificador');
		$pago->fecha = $f->format('Y-m-d');
		$uf = uf($f);
		if ($uf->total > 0) {
			$pago->uf = $uf->uf->value;
		} else {
			$pago->uf = 0;
		}

		$pago->save();
		$cuota->save();
		header('Location: ' . url('', ['p' => 'pies', 'a' => 'resumen', 'pie' => $cuota->pie()->id]));
	}
	public static function edited()
	{
		$id = get('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);
		$pago = $cuota->pago();
		foreach ($_POST as $key => $value) {
			$pago->$key = $value;
		}
		$pago->save();
	}
	public static function pendientes()
	{
		$f = \Carbon\Carbon::today(config('app.timezone'));
		$cuotas = \Model::factory(Cuota::class)
			->select('cuota.*')
			->join('pago', ['pago.id', '=', 'cuota.pago'])
			->join('venta', ['venta.pie', '=', 'cuota.pie'])
			->raw_join('JOIN (SELECT e1.* FROM (SELECT pago, MAX(id) AS id FROM estado_pago GROUP BY pago) e0 JOIN estado_pago e1 ON e1.id = e0.id)', ['ep.pago', '=', 'pago.id'], 'ep')
			->where('ep.estado', 0)
			->where('venta.estado', 1)
			->whereLte('pago.fecha', $f->format('Y-m-d'))
			->order_by_asc('pago.fecha')
			->findMany();
		$sum = 0;
		if (count($cuotas) > 0) {
			$sum = array_reduce($cuotas, function($carry, $item) {
				$carry += $item->pago()->valor;
				return $carry;
			});
		}
		setlocale(LC_TIME, 'es');
		return view('ventas.pies.cuotas.pendientes', compact('cuotas', 'sum'));
	}
	public static function depositar()
	{
		$id = post('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);
		if ($cuota->pago()->estado()->estado == 1) {
			return 'ok';
		}
		$estado = \Model::factory(EstadoPago::class)->create();
		$estado->pago = $cuota->pago()->id;
		$estado->estado = 1;
		$f = Carbon::parse(post('fecha'), config('app.timezone'));
		$estado->fecha = $f->format('Y-m-d');
		$estado->save();
		return 'ok';
	}
	public static function remove()
	{
		$id = get('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);

		$estado = \Model::factory(EstadoPago::class)->create();
		$estado->pago = $cuota->pago()->id;
		$estado->estado = -3;
		$f = Carbon::today(config('app.timezone'));
		$estado->fecha = $f->format('Y-m-d');
		$estado->save();
		header('Location: ' . url('', ['p' => 'pies', 'a' => 'resumen', 'pie' => $cuota->pie()->id]));
	}
	public static function para_abonar()
	{
		$cuotas = \Model::factory(Cuota::class)
			->select('cuota.*')
			->join('pago', ['pago.id', '=', 'cuota.pago'])
			->join('venta', ['venta.pie', '=', 'cuota.pie'])
			->raw_join('JOIN (SELECT e1.* FROM (SELECT pago, MAX(id) AS id FROM estado_pago GROUP BY pago) e0 JOIN estado_pago e1 ON e1.id = e0.id)', ['ep.pago', '=', 'pago.id'], 'ep')
			->where('ep.estado', 1)
			->where('venta.estado', 1)
			->order_by_asc('ep.fecha')
			->findMany();
		$ini = get('start');
		if ($ini == null) {
			$ini = 0;
		}
		$n = get('step');
		if ($n == 0) {
			$n = 30;
		}
		$total = count($cuotas);
		$cuotas = array_slice($cuotas, $ini, $n);
		$pages = ceil($total / $n);
		$current = ($ini + $n) / $n;
		return view('ventas.pies.cuotas.abonar', compact('cuotas', 'total', 'pages', 'current'));
	}
	public static function abonar()
	{
		$id = post('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);
		if ($cuota->pago()->estado()->estado == 2) {
			return 'ok';
		}
		$estado = \Model::factory(EstadoPago::class)->create();
		$estado->pago = $cuota->pago()->id;
		$estado->estado = 2;
		$f = Carbon::parse(post('fecha'), config('app.timezone'));
		$estado->fecha = $f->format('Y-m-d');
		$estado->save();
		return 'ok';
	}
	public static function rebotar()
	{
		$id = post('cuota');
		$cuota = \Model::factory(Cuota::class)->findOne($id);
		if ($cuota->pago()->estado()->estado == -1) {
			return 'ok';
		}
		$estado = \Model::factory(EstadoPago::class)->create();
		$estado->pago = $cuota->pago()->id;
		$estado->estado = -1;
		$f = Carbon::parse(post('fecha'), config('app.timezone'));
		$estado->fecha = $f->format('Y-m-d');
		$estado->save();
		return 'ok';
	}
	public static function add()
	{
		$id = get('pie');
		$pie = \Model::factory(Pie::class)->findOne($id);
		return view('ventas.pies.cuotas.add', compact('pie'));
	}
	public static function agregar()
	{
		$id = get('pie');
		$pie = \Model::factory(Pie::class)->findOne($id);

		$cant = $pie->cuotas - count($pie->cuotas());
		for ($i = 0; $i < $cant; $i ++) {
			if (trim(post('valor' . $i)) == '') {
				continue;
			}
			$banco = \Model::factory(Banco::class)->where('nombre', post('banco' . $i))->findOne();
			$f = Carbon::createFromDate(post('year' . $i), post('month' . $i), post('day' . $i), config('app.timezone'));
			$uf = uf($f);
			$valor = correctNumber(post('valor' . $i));

			$pago = \Model::factory(Pago::class)->create();
			$pago->banco = $banco->id;
			$pago->fecha = $f->format('Y-m-d');
			if ($uf and $uf->total > 0) {
				$pago->uf = $uf->uf->value;
			} else {
				$pago->uf = 0;
			}
			$pago->tipo = 1;
			$pago->valor = $valor;
			$pago->identificador = post('identificador' . $i);

			$cuota = \Model::factory(Cuota::class)->create();
			$cuota->pie = $pie->id;
			$cuota->fecha = $pago->fecha;
			$cuota->{'valor_$'} = $pago->valor;
			$cuota->estado = 0;
			$cuota->banco = $pago->banco;
			$cuota->uf = $pago->uf;
			$cuota->numero = post('numero' . $i);

			$pago->new();

			$cuota->pago = $pago->id;
			$cuota->save();
			header('Location: ' . url('', ['p' => 'ventas', 'a' => 'show', 'venta' => $pie->venta()->id]));
		}
	}
}
?>
