<?php
namespace App\Controller;

use App\Definition\Controller;
use Incoviba\old\Proyecto\Pagare;
use Incoviba\old\Proyecto\Proyecto;
use Incoviba\old\Proyecto\RenovacionPagare;
use Incoviba\old\Proyecto\TipoMonedaPagare;

class Pagares
{
	use Controller;

  public static function show()
  {
    $pagare = model(Pagare::class)->findOne(get('pagare'));
    return view('proyectos.pagares.show', compact('pagare'));
  }
	public static function add()
	{
		$proyecto = model(Proyecto::class)->findOne(get('proyecto'));
		return view('proyectos.pagares.add', compact('proyecto'));
	}
	public static function do_add()
	{
		$proyecto = model(Proyecto::class)->findOne(get('proyecto'));
		$data = post();

		$data['id'] = $data['numero'];
		unset($data['numero']);
		$data['proyecto'] = $proyecto->id;
		$moneda = model(TipoMonedaPagare::class)->where('descripcion', $data['moneda'])->findOne();
		$data['moneda'] = $moneda->id;

		$fecha = ['year', 'month', 'day'];
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha'] = implode('-', $fecha_arr);

    foreach ($fecha as &$key) {
      $key .= '_banco';
    }
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha_banco'] = implode('-', $fecha_arr);

		$data['abonado'] = (int) $data['abonado'];
		if ($data['abonado'] == 0) {
			$data['fecha'] = '0000-00-00';
		}

		$pagare = model(Pagare::class)->create($data);
		$pagare->save();
		header('Location: ' . nUrl('pagares', 'show', ['pagare' => $pagare->id]));
	}
  public static function edit()
  {
    $pagare = model(Pagare::class)->findOne(get('pagare'));
    return view('proyectos.pagares.edit', compact('pagare'));
  }
  public static function do_edit()
  {
    $pagare = model(Pagare::class)->findOne(get('pagare'));

    $data = post();
    if ($pagare->id != $data['numero']) {
      foreach ($pagare->renovaciones() as $renovacion) {
        $renovacion->pagare = $data['numero'];
        $renovacion->save();
      }
      $pagare->id = $data['numero'];
      $changed = true;
    }
    unset($data['numero']);
    $moneda = model(TipoMonedaPagare::class)->where('descripcion', $data['moneda'])->findOne();
    $data['moneda'] = $moneda->id;
    $fecha = ['year', 'month', 'day'];
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha'] = implode('-', $fecha_arr);

    foreach ($fecha as &$key) {
      $key .= '_banco';
    }
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha_banco'] = implode('-', $fecha_arr);

		$data['abonado'] = (int) $data['abonado'];
		if ($data['abonado'] == 0) {
			$data['fecha'] = '0000-00-00';
		}

    $changed = false;
    foreach ($data as $k => $v) {
      if ($pagare->$k != $v) {
        $pagare->$k = $v;
        $changed = true;
        if (strpos($k, 'fecha') !== false) {
          $pagare->uf = 0;
        }
      }
    }

    if ($changed) {
      $pagare->save();
    }
    header('Location: ' . nUrl('pagares', 'show', ['pagare' => $pagare->id]));
  }
  public static function edit_renovacion()
  {
    $renovacion = model(RenovacionPagare::class)->findOne(get('renovacion'));
    return view('proyectos.pagares.edit_renovacion', compact('renovacion'));
  }
  public static function do_edit_renovacion()
  {
    $renovacion = model(RenovacionPagare::class)->findOne(get('renovacion'));

    $data = post();
    $fecha = ['year', 'month', 'day'];
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha'] = implode('-', $fecha_arr);

    foreach ($fecha as &$key) {
      $key .= '_banco';
    }
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha_banco'] = implode('-', $fecha_arr);

    $changed = false;
    foreach ($data as $k => $v) {
      if ($renovacion->$k != $v) {
        $renovacion->$k = $v;
        $changed = true;
        if (strpos($k, 'fecha') !== false) {
          $renovacion->uf = 0;
        }
      }
    }
    if ($changed) {
      $renovacion->save();
    }
    header('Location: ' . nUrl('pagares', 'show', ['pagare' => $renovacion->pagare]));
  }
	public static function add_renovacion()
	{
		$pagare = model(Pagare::class)->findOne(get('pagare'));
    return view('proyectos.pagares.add_renovacion', compact('pagare'));
	}
	public static function do_add_renovacion()
	{
		$pagare = model(Pagare::class)->findOne(get('pagare'));
		$data = post();

		$data['pagare'] = $pagare->id;
		$fecha = ['year', 'month', 'day'];
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha'] = implode('-', $fecha_arr);

    foreach ($fecha as &$key) {
      $key .= '_banco';
    }
    $fecha_arr = array_filter($data, function($item) use ($fecha) {
      return (array_search($item, $fecha) !== false);
    }, \ARRAY_FILTER_USE_KEY);
    uksort($fecha_arr, function($a, $b) use ($fecha) {
      return array_search($a, $fecha) - array_search($b, $fecha);
    });
    foreach ($fecha as $f) {
      unset($data[$f]);
    }
    array_walk($fecha_arr, function(&$item) {
      if (strlen($item) < 4) {
        $item = str_pad($item, 2, '0', \STR_PAD_LEFT);
      }
    });
    $data['fecha_banco'] = implode('-', $fecha_arr);

		$renovacion = model(RenovacionPagare::class)->create($data);
		$renovacion->save();

		header('Location: ' . nUrl('pagares', 'show', ['pagare' => $renovacion->pagare]));
	}
}
