<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Almacenes extends CI_Controller {

	public function __construct() {
		parent::__construct();
		if (!$this->Usuario->try()) {
			redirect('login');
		}

		// Load database
		$this->load->model('Almacen_model', 'Almacen', true);
	}

	/**
	 */
	public function descuadres() {
		//Busca todos los productos que tengan stock fisico distinto a la suma de los stocks fisicos de todos los almacenes

		$data['descuadres'] = $this->Almacen->descuadres();
		$data = $this->Producto->get_globales($data);
		/*
		$data['estado'] = $filtros['id_estado_tarea'] = $this->input->get('estado') ?? -1;
		// Si no se define responsable se mostrarán las tareas del usuario activo
		$data['responsable'] = $filtros['id_responsable'] = $this->input->get('responsable') ?? $_SESSION['usuario']['id'];
		// Si no se define solicitante se mostrarán todos
		$data['solicitante'] = $filtros['id_solicitante'] = $this->input->get('solicitante') ?? 0;

		$data['tareas'] = $this->Tarea->listado($filtros);
		$data = $this->Tarea->datos_globales($data);

		$data['filtrosEstados'] = ['-1' => 'En Curso', '0' => 'Todas'];
		$data['filtrosEstados'] += $data['estadosTareas'];

		$data['usuariosActivos'] = ['0' => 'Todos'] + $data['usuariosActivos'];
		*/
		$data['title'] = 'Descuadres';
		$data['ma'] = 'traspasos';
		$data['content'] = $this->load->view('almacenes/descuadres', $data , true);
		$this->load->view('default', $data);
	}

	public function ver($idAlmacen = null) {
		$data['id_almacen'] = $idAlmacen ?? ($this->input->get('id_almacen') ?? 3);
		$idAlmacen = $data['id_almacen'];
		$data['id_ubicacion'] = $filtros['id_ubicacion'] = $this->input->get('id_ubicacion') ?? '0';
		$data['tipo'] = $filtros['tipo'] = $this->input->get('tipo') ?? "0";
		$data['categoria'] = $filtros['categoria'] = $this->input->get('categoria') ?? 0;
		$data['proveedor'] = $filtros['proveedor'] = $this->input->get('proveedor') ?? 0;
		$data['orden'] = $filtros['orden'] = $this->input->get('orden') ?? 0;

		if ($filtros['tipo'] == 6) {
			$filtros['existente'] = true;
		}

		$data['productos'] = $this->Almacen->monitor($data['id_almacen'], $filtros);
		$data['totales'] = $this->Almacen->totales_inventario($data['id_almacen'], $filtros);

		if ($data['tipo'] == 0) {
			$data['titulo'] = 'Seleccionar Tipo';
		}

		if ($data['tipo'] == 1) {
			$data['titulo'] = 'Productos en existencia';
		}
		if ($data['tipo'] == 2) {
			$data['titulo'] = 'Productos sin stock';
		}
		if ($data['tipo'] == 3) {
			$data['titulo'] = 'Productos con poco stock';
		}

		if ($data['tipo'] == 4) {
			$data['titulo'] = 'Productos sugeridos según ventas últimos 15 días';
		}

		if ($data['tipo'] == 5) {
			$data['titulo'] = 'Productos no deseados';
		}

		if ($data['tipo'] == 6) {
			$data['titulo'] = 'Productos Requeridos';
		}

		$data = $this->Producto->get_globales($data);
		$data['usuarios'] = $this->Usuario->lista();

		$data['linkActivo']['section'] = 'Almacenes';
		$linksActivos = [
			1 => 'Bodega',
			5 => 'Tienda Italia 1601',
			8 => 'Tienda Los Dominicos',
			9 => 'Bodega Los Dominicos',
			12 => 'Tienda Drugstore',
		];
		if (!empty($linksActivos[$idAlmacen])) {
			$data['linkActivo']['activo'] = $linksActivos[$idAlmacen];
		}
		else {
			$data['linkActivo']['activo'] = 'Otros Almacenes';
		}
		
		$data['almacenes_listado'] = $this->Almacen->listado_stock();

		$data['nombre_almacen'] = $data['almacenes'][$idAlmacen];
		$data['title'] = $data['almacenes'][$idAlmacen] . ' - ' . $data['titulo'];
		//$data['ma'] = 'traspasos';
		$data['content'] = $this->load->view('almacenes/almacen', $data , true);
		$this->load->view('default', $data);
	}

	public function errores_inventario() {
		$data['corregido'] = $filtros['corregido'] = $this->input->get('corregido') ?? 0;

		//Busca todos los errors de inventario no corregido
		$data['inventarios'] = $this->Almacen->errores_inventario($filtros);

		$data = $this->Producto->get_globales($data);
		$data['usuarios'] = $this->Usuario->lista();

		$data['tipo_corregido'] = [
			0 => 'Por Corregir',
			1 => 'Corregidos'
		];

		$data['title'] = 'Errores Inventario';
		$data['content'] = $this->load->view('almacenes/errores_inventario', $data , true);
		$this->load->view('default', $data);
	}

	public function inventarios() {
		// Filtro por almacen
		// filtro por usuario
		$data['id_almacen'] = $filtros['id_almacen'] = $this->input->get('id_almacen') ?? 0;
		//$data['periodo'] = $filtros['periodo'] = $this->input->get('periodo') ?? date('Ym');
		$data['fecha'] = $filtros['fecha'] = $this->input->get('fecha') ?? date('Y-m-d');
		$data['id_revisor'] = $filtros['id_revisor'] = $this->input->get('id_revisor') ?? 0;

		//Busca todos los errors de inventario no corregido
		$data['inventarios'] = $this->Almacen->inventarios($filtros);
		$data['periodos'] = $this->Almacen->periodos_inventarios($filtros);

		$data = $this->Producto->get_globales($data);
		$data['usuarios'] = $this->Usuario->lista();

		$data['tipo_corregido'] = [
			0 => 'Por Corregir',
			1 => 'Corregidos'
		];

		$data['title'] = 'Inventarios';
		$data['content'] = $this->load->view('almacenes/inventarios', $data , true);
		$this->load->view('default', $data);
	}

	public function get_ubicacion() {
		//Se revisa si se está creando una ubicacion
		if (!empty($this->input->post('id'))) {
			$result = $this->Almacen->get_ubicacion($this->input->post('id'));
		}
		else if(!empty($this->input->get('id'))) {
			$result = $this->Almacen->get_ubicacion($this->input->get('id'));
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	public function save_ubicacion() {
		//Se revisa si se está creando una ubicacion
		if ($this->input->post('nombre')) {
			$result = $this->Almacen->save_ubicacion($_POST);
			echo json_encode($result);
		}
	}

	public function get_almacen_producto() {
		// Busca el stock de un producto en un almacen
		if (!empty($this->input->post('id'))) {
			$result = $this->Almacen->get_almacen_producto($this->input->post('id'));
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	public function save_validar_stock() {
		// Se guarda la validación de inventario en Inventario y AP
		if ($this->input->post('id')) {
			$result = $this->Almacen->save_validar_stock($_POST);
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}


	public function contar_inventario() {
		$data['id_almacen'] = $idAlmacen ?? ($this->input->get('id_almacen') ?? 3);
		$idAlmacen = $data['id_almacen'];
		$data['id_ubicacion'] = $filtros['id_ubicacion'] = $this->input->get('id_ubicacion') ?? '0';
		$filtros['orden'] = 2;
		$filtros['tipo'] = 1;
		$filtros['modo_inventario'] = 1;

		$data['productos'] = $this->Almacen->monitor($data['id_almacen'], $filtros);

		$data = $this->Producto->get_globales($data);
		$data['usuarios'] = $this->Usuario->lista();

		$data['almacenes_listado'] = $this->Almacen->listado_stock();

		$data['nombre_almacen'] = $data['almacenes'][$idAlmacen];
		$data['nombre_ubicacion'] = !empty($data['ubicaciones'][$data['id_ubicacion']]) 
			? $data['ubicaciones'][$data['id_ubicacion']] 
			: 'Todas las ubicaciones';

		$data['title'] = $data['nombre_almacen'] . ' - ' . $data['nombre_ubicacion'];
		//$data['ma'] = 'traspasos';
		$data['content'] = $this->load->view('almacenes/contar_inventario', $data , true);
		$this->load->view('default', $data);
	}

	public function get_inventario() {
		//Se revisa si se está creando una ubicacion
		if (!empty($this->input->post('id'))) {
			$result = $this->Almacen->get_inventario($this->input->post('id'));
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	public function guardar_inventario() {
		pr($_POST);
		die;
		/*
		//Se revisa si se está creando una ubicacion
		if (!empty($this->input->post('id'))) {
			$result = $this->Almacen->save_inventario($_POST);
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
		*/
	}

	public function save_inventario() {
		//Se revisa si se está creando una ubicacion
		if (!empty($this->input->post('id'))) {
			$result = $this->Almacen->save_inventario($_POST);
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	/**
	 * Generaregistros de almacenes prodcutos con todas las cantidades en 0
	 * Esto evita errores por no tener registros de venta almacenes
	 */
	public function carga_vacios(){
		$data = $this->Almacen->carga_vacios();
	}
}
