<?php
header("Content-Type: text/html;charset=utf-8");
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once("../data/Conexion.php");
require_once("../data/Tablas.php");
require_once("../clases/cls_almacen_general.php");
require_once("../clases/cls_producto.php");
require_once("../clases/cls_control_movimiento.php");

function almacen_general_lista(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$buscar = $_POST["buscar"];
		$ordendireccion = "ASC";
		if (isset($_POST["orden"])){
			$ordendireccion = $_POST["orden"];
		}
		if (isset($_POST["items_pagina"])){
			$items_pagina = $_POST["items_pagina"];
		}
		if (isset($_POST["items_cantidad"])){
			$items_cantidad = $_POST["items_cantidad"];
		}
		$datos = new cls_Group_Almacen_General();
		if (isset($_POST["filtro_categoria"]) && isset($_POST["filtro_exitencia"])) {
			if (isset($_POST["filtro_tipo"]) && $_POST["filtro_tipo"] == "filtro_barras"){
				if (isset($_POST["agrupar"]) && $_POST["agrupar"] == true){
					$datos = cls_Group_Almacen_General::CodigoBarrasCategoriaStockAgrupado($buscar, $_POST["filtro_categoria"], $_POST["filtro_exitencia"], $ordendireccion);
				} else {
					$datos = cls_Group_Almacen_General::CodigoBarrasCategoriaStock($buscar, $_POST["filtro_categoria"], $_POST["filtro_exitencia"], $ordendireccion);
				}
			} else {
				if (isset($_POST["agrupar"]) && $_POST["agrupar"] == true){
					$datos = cls_Group_Almacen_General::BuscarCategoriaStockAgrupado($buscar, $_POST["filtro_categoria"], $_POST["filtro_exitencia"], $ordendireccion);
				} else {
					$datos = cls_Group_Almacen_General::BuscarCategoriaStock($buscar, $_POST["filtro_categoria"], $_POST["filtro_exitencia"], $ordendireccion);
				}
			}
		} else if (isset($_POST["filtro_tipo"]) && $_POST["filtro_tipo"] == "filtro_barras"){
			if (isset($_POST["agrupar"]) && $_POST["agrupar"] == true){
				$datos = cls_Group_Almacen_General::CodigoBarrasAgrupado($buscar, $ordendireccion);
			} else {
				$datos = cls_Group_Almacen_General::CodigoBarras($buscar, $ordendireccion);
			}
		} else {
			if (isset($_POST["agrupar"]) && $_POST["agrupar"] == true){
				$datos = cls_Group_Almacen_General::BuscarAgrupado($buscar, $ordendireccion);
			} else {
				$datos = cls_Group_Almacen_General::Buscar($buscar, $ordendireccion);
			}
		}
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"almacen_general_id"=>$datos->get_almacen_general_id($idx),
				"producto_id"=>$datos->get_producto_id($idx),
				"producto_codigo"=>$datos->get_producto_codigo($idx),
				"producto_codigo_barras"=>$datos->get_producto_codigo_barras($idx),
				"producto_nombre"=>$datos->get_producto_nombre($idx),
				"nombre_alternativo"=>$datos->get_nombre_alternativo($idx),
				"producto_imagen"=>$datos->get_producto_imagen($idx),
				"valor_ganancia"=>$datos->get_valor_ganancia($idx),
				"precio_compra"=>$datos->get_precio_compra($idx),
				"precio_venta"=>$datos->get_precio_venta($idx),
				"precio_minimo"=>$datos->get_precio_minimo($idx),
				"unidades"=>$datos->get_unidades($idx),
				"moneda_codigo"=>$datos->get_moneda_codigo($idx),
				"moneda_simbolo"=>$datos->get_moneda_simbolo($idx),
				"moneda_cambio"=>$datos->get_moneda_cambio($idx),
				"igv_porcentaje"=>$datos->get_igv_porcentaje($idx),
				"producto_codigo_barras"=>$datos->get_producto_codigo_barras($idx),
				"producto_codigo_almacen"=>$datos->get_producto_codigo_almacen($idx),
				"producto_fabricante"=>$datos->get_producto_fabricante($idx),
				"producto_modelo"=>$datos->get_producto_modelo($idx),
				"producto_serie"=>$datos->get_producto_serie($idx),
				"producto_peso"=>$datos->get_producto_peso($idx),
				"producto_stock_minimo"=>$datos->get_producto_stock_minimo($idx),
				"producto_codigo_barras"=>$datos->get_producto_codigo_barras($idx),
				//"producto_estado"=>$datos->get_producto_estado($idx),
				"producto_unitario_id"=>$datos->get_producto_unitario_id($idx),
				"producto_unitario_nombre"=>$datos->get_producto_unitario_nombre($idx),
				"producto_fracciones"=>$datos->get_producto_fracciones($idx),
			));
		}
		$respuestas["datos"] = $lista;
		$respuestas["estado"]  = "ok";
		$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_producto(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"])){
		$codigo = $_POST["buscar"];
		$datos = cls_Group_Almacen_General::Producto($codigo);
		$datos->cargar_datos(0, 0);
		$idx = $datos->get_cantidad_cargados()-1;
		$respuestas["datos"] = array(
				"almacen_general_id"=>$datos->get_almacen_general_id($idx),
				"compra_id"=>$datos->get_compra_id($idx),
				"compra_producto_id"=>$datos->get_compra_producto_id($idx),
				"producto_id"=>$datos->get_producto_id($idx),
				"valor_ganancia"=>$datos->get_valor_ganancia($idx),
				"precio_compra"=>$datos->get_precio_compra($idx),
				"precio_venta"=>$datos->get_precio_venta($idx),
				"precio_minimo"=>$datos->get_precio_minimo($idx),
				"unidades"=>$datos->get_unidades($idx),
				"moneda_codigo"=>$datos->get_moneda_codigo($idx),
				"moneda_simbolo"=>$datos->get_moneda_simbolo($idx),
				"moneda_cambio"=>$datos->get_moneda_cambio($idx),
				"igv_porcentaje"=>$datos->get_igv_porcentaje($idx),
				"ubicacion"=>$datos->get_ubicacion($idx),
				"fecha_vencimiento"=>$datos->get_fecha_vencimiento($idx),
				"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
				
				"producto_nombre"=>$datos->get_producto_nombre($idx),
				"producto_imagen"=>$datos->get_producto_imagen($idx),
				"producto_codigo"=>$datos->get_producto_codigo($idx),
				"producto_codigo_barras"=>$datos->get_producto_codigo_barras($idx),
				"producto_codigo_almacen"=>$datos->get_producto_codigo_almacen($idx),
				"producto_fabricante"=>$datos->get_producto_fabricante($idx),
				"producto_modelo"=>$datos->get_producto_modelo($idx),
				"producto_serie"=>$datos->get_producto_serie($idx),
				"producto_peso"=>$datos->get_producto_peso($idx),
				"producto_stock_minimo"=>$datos->get_producto_stock_minimo($idx),
				"unidad_medida_id"=>$datos->get_unidad_medida_id($idx),
				"unidad_medida_nombre"=>$datos->get_unidad_medida_nombre($idx),
				"unidad_medida_simbolo"=>$datos->get_unidad_medida_simbolo($idx),
				"categoria_id"=>$datos->get_categoria_id($idx),
				"categoria_codigo"=>$datos->get_categoria_codigo($idx),
				"categoria_nombre"=>$datos->get_categoria_nombre($idx),
				"producto_unitario_id"=>$datos->get_producto_unitario_id($idx),
				"producto_unitario_nombre"=>$datos->get_producto_unitario_nombre($idx),
				"producto_fracciones"=>$datos->get_producto_fracciones($idx),
		);
		$respuestas["estado"]  = "ok";
		$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_datos(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"])){
		$codigo = $_POST["buscar"];
		$codigo = explode(", ", $codigo)[0];
		$datos = cls_Almacen_General::Indice($codigo);
		$respuestas["datos"] = array(
				"almacen_general_id"=>$datos->get_almacen_general_id(),
				"compra_id"=>$datos->get_compra_id(),
				"compra_producto_id"=>$datos->get_compra_producto_id(),
				"producto_id"=>$datos->get_producto_id(),
				"valor_ganancia"=>$datos->get_valor_ganancia(),
				"precio_compra"=>$datos->get_precio_compra(),
				"precio_venta"=>$datos->get_precio_venta(),
				"precio_minimo"=>$datos->get_precio_minimo(),
				"unidades"=>$datos->get_unidades(),
				"moneda_codigo"=>$datos->get_moneda_codigo(),
				"moneda_simbolo"=>$datos->get_moneda_simbolo(),
				"moneda_cambio"=>$datos->get_moneda_cambio(),
				"igv_porcentaje"=>$datos->get_igv_porcentaje(),
				"ubicacion"=>$datos->get_ubicacion(),
				"fecha_vencimiento"=>$datos->get_fecha_vencimiento(),
				"tipo_movimiento"=>$datos->get_tipo_movimiento(),
				
				"producto_nombre"=>$datos->get_producto_nombre(),
				"producto_imagen"=>$datos->get_producto_imagen(),
				"producto_codigo"=>$datos->get_producto_codigo(),
				"producto_codigo_barras"=>$datos->get_producto_codigo_barras(),
				"producto_codigo_almacen"=>$datos->get_producto_codigo_almacen(),
				"producto_fabricante"=>$datos->get_producto_fabricante(),
				"producto_modelo"=>$datos->get_producto_modelo(),
				"producto_serie"=>$datos->get_producto_serie(),
				"producto_peso"=>$datos->get_producto_peso(),
				"producto_stock_minimo"=>$datos->get_producto_stock_minimo(),
				"unidad_medida_id"=>$datos->get_unidad_medida_id(),
				"unidad_medida_nombre"=>$datos->get_unidad_medida_nombre(),
				"unidad_medida_simbolo"=>$datos->get_unidad_medida_simbolo(),
				"categoria_id"=>$datos->get_categoria_id(),
				"categoria_codigo"=>$datos->get_categoria_codigo(),
				"categoria_nombre"=>$datos->get_categoria_nombre(),
				"producto_unitario_id"=>$datos->get_producto_unitario_id(),
				"producto_unitario_nombre"=>$datos->get_producto_unitario_nombre(),
				"producto_fracciones"=>$datos->get_producto_fracciones(),
		);
		$respuestas["estado"]  = "ok";
		$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_registrar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0);
	$usuario_editor = 0;
	$codigo = 0;
	$activo = true;
	if (isset($_SESSION["usuario_editor"])){
		$usuario_editor = $_SESSION["usuario_editor"];
	}
	if (isset($_POST["txt_codigo"])){
		$codigo = $_POST["txt_codigo"];
	}
	if (isset($_POST["activo"])){
		$activo = $_POST["activo"];
	}
	$datos = cls_Almacen_General::Indice($codigo);
	if (isset($_POST["producto_id"])){
		$datos->set_producto_id($_POST["producto_id"]);
		$dato_prod = cls_Producto::Indice($_POST["producto_id"]);
		if (isset($_POST["imagenes"]) && $dato_prod->get_producto_id() > 0 && $_POST["imagenes"] != $dato_prod->get_imagen()){
			$dato_prod->set_imagen($_POST["imagenes"]);
			$dato_prod->registrar($usuario_editor);
		}
	}
	if (isset($_POST["valor_ganancia"])){
		$datos->set_valor_ganancia($_POST["valor_ganancia"]);
	}
	if (isset($_POST["precio_compra"])){
		$datos->set_precio_compra($_POST["precio_compra"]);
	}
	if (isset($_POST["precio_venta"])){
		$datos->set_precio_venta($_POST["precio_venta"]);
	}
	if (isset($_POST["precio_minimo"])){
		$datos->set_precio_minimo($_POST["precio_minimo"]);
	}
	if (isset($_POST["unidades"])){
		$datos->set_unidades($_POST["unidades"]);
	}
	if (isset($_POST["tipo_movimiento"])){
		$datos->set_tipo_movimiento($_POST["tipo_movimiento"]);
	}
	$datos->set_activo($activo);
	if ($datos->registrar($usuario_editor)){
		//$revision = cls_Group_Almacen_General::ProductoPrecios($datos->get_producto_id(), $datos->get_precio_venta(), $datos->get_precio_minimo());
		$revision = cls_Group_Almacen_General::Producto($datos->get_producto_id());
		$revision->cargar_datos(0, 0);
		if ($revision->get_cantidad_cargados() > 1){
			$ultimo = cls_Almacen_General::Indice($revision->get_almacen_general_id($revision->get_cantidad_cargados()-1));
			for ($idx=0; $idx<$revision->get_cantidad_cargados()-1; $idx++){
				$retirar = cls_Almacen_General::Indice($revision->get_almacen_general_id($idx));
				$ultimo->set_unidades($ultimo->get_unidades()+$retirar->get_unidades());
				$retirar->eliminar($usuario_editor);
			}
			$ultimo->registrar($usuario_editor);
			$respuestas["actualizar_tabla"]  = true;
		} else {
			$respuestas["actualizar_tabla"]  = false;
		}
		$respuestas["codigo"] = $datos->get_almacen_general_id();
		$respuestas["estado"]  = "ok";
		$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error registrando los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_registrar_masivo(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["datos"])){
		$usuario_editor = 0;
		if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = $_SESSION["usuario_editor"];
		}
		$datos = json_decode($_POST["datos"], true);
		for ($idx=0; $idx<count($datos); $idx++){
			$datos_almacen = cls_Almacen_General::Indice($datos[$idx]["almacen"]);
			$datos_almacen->set_valor_ganancia($datos[$idx]["valor_ganancia"]);
			$datos_almacen->set_precio_venta($datos[$idx]["precio_venta"]);
			$datos_almacen->registrar($usuario_editor);
		}
		$respuestas["estado"]  = "ok";
		$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_convertir_unidades(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["tienda"]) && isset($_POST["producto"]) && isset($_POST["almacen"]) && isset($_POST["origen"]) && isset($_SESSION["usuario_editor"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Almacen_General::Producto($_POST["producto"]);
		$unidades = $datos->get_unidades();
		if ($unidades > 0){
			date_default_timezone_set('America/Lima');
			$fecha = date("Y-m-d H:i:s");
			if ($datos->get_producto_unitario_id() > 0){
				$datos_unitarios = cls_Almacen_General::Producto($datos->get_producto_unitario_id());
				if ($datos_unitarios->get_almacen_general_id() > 0 && $datos_unitarios->get_activo() == 1){
					$datos->set_unidades($unidades - 1);
					$datos->registrar($usuario_editor);
					$prod_movimiento_in = new cls_Control_Movimiento();
					$prod_movimiento_in->set_control_movimiento_id(0);
					$prod_movimiento_in->set_origen_id(0);
					$prod_movimiento_in->set_tienda_id(0);
					$prod_movimiento_in->set_destino_id(0);
					$prod_movimiento_in->set_almacen_general_id($datos->get_almacen_general_id());
					$prod_movimiento_in->set_almacen_tienda_id(0);
					$prod_movimiento_in->set_movimiento_id(0);
					$prod_movimiento_in->set_movimiento_producto_id(0);
					$prod_movimiento_in->set_producto_id($datos->get_producto_id());
					$prod_movimiento_in->set_unidades(1);
					$prod_movimiento_in->set_tipo_movimiento("Desempaquetado");
					$prod_movimiento_in->set_estado("Salida");
					$prod_movimiento_in->set_movimiento_fecha($fecha);
					$prod_movimiento_in->registrar($usuario_editor);
					
					$unidades = $datos_unitarios->get_unidades();
					$datos_unitarios->set_unidades($unidades + $datos->get_producto_fracciones());
					$datos_unitarios->registrar($usuario_editor);
					$prod_movimiento_out = new cls_Control_Movimiento();
					$prod_movimiento_out->set_control_movimiento_id(0);
					$prod_movimiento_out->set_origen_id(0);
					$prod_movimiento_out->set_tienda_id(0);
					$prod_movimiento_out->set_destino_id(0);
					$prod_movimiento_out->set_almacen_general_id($datos_unitarios->get_almacen_general_id());
					$prod_movimiento_out->set_almacen_tienda_id(0);
					$prod_movimiento_out->set_movimiento_id(0);
					$prod_movimiento_out->set_movimiento_producto_id(0);
					$prod_movimiento_out->set_producto_id($datos_unitarios->get_producto_id());
					$prod_movimiento_out->set_unidades($datos->get_producto_fracciones());
					$prod_movimiento_out->set_tipo_movimiento("Desempaquetado");
					$prod_movimiento_out->set_estado("Ingreso");
					$prod_movimiento_out->set_movimiento_fecha($fecha);
					$prod_movimiento_out->registrar($usuario_editor);
					$respuestas["estado"]  = "ok";
					$respuestas["mensaje"]  = "Los datos se actualizaron correctamente";
				} else {
					$respuestas["mensaje"]  = "No se encuentra los datos del producto unitario.";
				}
			} else {
				$respuestas["mensaje"]  = "El producto no tiene vinculado un producto unitario.";
			}
		} else {
			$respuestas["mensaje"]  = "El producto no tiene suficiente stock.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_eliminar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	/*if (isset($_POST["buscar"])){
		$usuario_editor = 0;
		if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = $_SESSION["usuario_editor"];
		}
		$codigo = $_POST["buscar"];
		$datos = cls_Categoria::Indice($codigo);
		if ($datos->eliminar($usuario_editor)){
			$respuestas["estado"]  = "ok";
			$respuestas["mensaje"]  = "Los datos se eliminaron correctamente";
		} else {
			$respuestas["mensaje"]  = "No se pudo eliminar los datos correctamente";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}*/
	echo(json_encode($respuestas));
}

if (isset($_POST["accion"])){
    if ($_POST["accion"] == "lista"){
		almacen_general_lista();
	} else if ($_POST["accion"] == "datos"){
		almacen_general_datos();
    } else if ($_POST["accion"] == "producto"){
		almacen_general_producto();
    } else if ($_POST["accion"] == "registrar"){
		almacen_general_registrar();
    } else if ($_POST["accion"] == "registrar_masivo"){
		almacen_general_registrar_masivo();
	} else if ($_POST["accion"] == "convertir_unidades"){
		almacen_convertir_unidades();
	} else if ($_POST["accion"] == "eliminar"){
		almacen_general_eliminar();
	}
}
?>
