<?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_producto.php");
require_once("../clases/cls_compra.php");
require_once("../clases/cls_compra_producto.php");
require_once("../clases/cls_almacen_general.php");
require_once("../clases/cls_control_movimiento.php");

function compra_lista(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$buscar = $_POST["buscar"];
		$ordendireccion = $_POST["orden"];
		$filtro_estado = "Todos";
		if (isset($_POST["filtro_estado"])){
			$filtro_estado = $_POST["filtro_estado"];
		}
		if (isset($_POST["items_pagina"])){
			$items_pagina = $_POST["items_pagina"];
		}
		if (isset($_POST["items_cantidad"])){
			$items_cantidad = $_POST["items_cantidad"];
		}
		$datos = new cls_Group_Compra();
		if (isset($_POST["fecha_min"]) && isset($_POST["fecha_max"])){
			$fecha_min = $_POST["fecha_min"];
			$fecha_max = $_POST["fecha_max"];
			$datos = cls_Group_Compra::RangoFechaEstadoRegistro($fecha_min, $fecha_max, $filtro_estado, $ordendireccion);
		} else {
			$datos = cls_Group_Compra::RangoEstadoRegistro($filtro_estado, $ordendireccion);
		}
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"compra_id"=>$datos->get_compra_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"operacion"=>$datos->get_operacion($idx),
				"comprobante"=>$datos->get_comprobante($idx),
				"numero"=>$datos->get_numero($idx),
				"proveedor_id"=>$datos->get_proveedor_id($idx),
				"proveedor_nombre"=>$datos->get_proveedor_nombre($idx),
				"proveedor_documento_tipo"=>$datos->get_proveedor_documento_tipo($idx),
				"proveedor_documento_numero"=>$datos->get_proveedor_documento_numero($idx),
				"responsable_id"=>$datos->get_responsable_id($idx),
				"responsable_nombre"=>$datos->get_responsable_nombre($idx),
				"responsable_documento_tipo"=>$datos->get_responsable_documento_tipo($idx),
				"responsable_documento_numero"=>$datos->get_responsable_documento_numero($idx),
				"moneda_codigo"=>$datos->get_moneda_codigo($idx),
				"igv_porcentaje"=>$datos->get_igv_porcentaje($idx),
				"estado_registro"=>$datos->get_estado_registro($idx),
				"observaciones"=>$datos->get_observaciones($idx),
				"costo_total"=>$datos->get_costo_total($idx),
				"proveedor_nombre"=>$datos->get_proveedor_nombre($idx),
				"proveedor_documento_tipo"=>$datos->get_proveedor_documento_tipo($idx),
				"proveedor_documento_numero"=>$datos->get_proveedor_documento_numero($idx),
				"proveedor_direccion"=>$datos->get_proveedor_direccion($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 compra_datos(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"])){
			$codigo = $_POST["buscar"];
			$datos = cls_Compra::Indice($codigo);
			$productos = cls_Group_Compra_Producto::Compra($datos->get_compra_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				array_push($lista, array(
					"compra_producto_id"=>$productos->get_compra_producto_id($idx),
					"compra_id"=>$productos->get_compra_id($idx),
					"producto_codigo"=>$productos->get_codigo($idx),
					"producto_id"=>$productos->get_producto_id($idx),
					"moneda_codigo"=>$productos->get_moneda_codigo($idx),
					"igv_porcentaje"=>$productos->get_igv_porcentaje($idx),
					"valor_ganancia"=>$productos->get_valor_ganancia($idx),
					"precio_compra"=>$productos->get_precio_compra($idx),
					"precio_venta"=>$productos->get_precio_venta($idx),
					"precio_minimo"=>$productos->get_precio_minimo($idx),
					"unidades"=>$productos->get_unidades($idx),
					"ubicacion"=>$productos->get_ubicacion($idx),
					"fecha_vencimiento"=>$productos->get_fecha_vencimiento($idx),
					"nombre"=>$productos->get_nombre($idx),
				));
			}
			
			$respuestas["datos"] = array(
					"compra_id"=>$datos->get_compra_id(),
					"fecha"=>$datos->get_fecha(),
					"operacion"=>$datos->get_operacion(),
					"comprobante"=>$datos->get_comprobante(),
					"numero"=>$datos->get_numero(),
					"proveedor_id"=>$datos->get_proveedor_id(),
					"proveedor_nombre"=>$datos->get_proveedor_nombre(),
					"proveedor_documento_tipo"=>$datos->get_proveedor_documento_tipo(),
					"proveedor_documento_numero"=>$datos->get_proveedor_documento_numero(),
					"responsable_id"=>$datos->get_responsable_id(),
					"responsable_nombre"=>$datos->get_responsable_nombre(),
					"responsable_documento_tipo"=>$datos->get_responsable_documento_tipo(),
					"responsable_documento_numero"=>$datos->get_responsable_documento_numero(),
					"moneda_codigo"=>$datos->get_moneda_codigo(),
					"igv_porcentaje"=>$datos->get_igv_porcentaje(),
					"estado_registro"=>$datos->get_estado_registro(),
					"observaciones"=>json_decode($datos->get_observaciones(), true),
					"costo_total"=>$datos->get_costo_total(),
					"proveedor_nombre"=>$datos->get_proveedor_nombre(),
					"proveedor_documento_tipo"=>$datos->get_proveedor_documento_tipo(),
					"proveedor_documento_numero"=>$datos->get_proveedor_documento_numero(),
					"proveedor_direccion"=>$datos->get_proveedor_direccion(),
					"productos"=>$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 compra_registrar(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0, "indices"=>array());
		$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"];
		}
		$fecha = $_POST["txt_fecha"];
		$operacion = $_POST["txt_operacion"];
		$comprobante = $_POST["txt_comprobante"];
		$numero = $_POST["txt_numero"];
		$proveedor_id = $_POST["txt_proveedor_id"];
		$responsable_id = $_POST["txt_responsable_id"];
		$moneda_codigo = $_POST["txt_moneda"];
		$igv_porcentaje = $_POST["txt_igv"];
		$estado_registro = $_POST["txt_estado_registro"];
		$costo_total = $_POST["txt_costo_total"];
		$productos = json_decode($_POST["txt_lista"], true);
		$eliminados = json_decode($_POST["txt_eliminado"], true);
		$observaciones = $_POST["txt_observaciones"];
		if ($comprobante == "Sin Documento"){
			$numero = "";
		}
		
		$datos = cls_Compra::Indice($codigo);
		$datos->set_fecha($fecha);
		$datos->set_operacion($operacion);
		$datos->set_comprobante($comprobante);
		$datos->set_numero($numero);
		$datos->set_proveedor_id($proveedor_id);
		$datos->set_responsable_id($responsable_id);
		$datos->set_moneda_codigo($moneda_codigo);
		$datos->set_igv_porcentaje($igv_porcentaje);
		$datos->set_estado_registro($estado_registro);
		$datos->set_observaciones($observaciones);
		$datos->set_costo_total($costo_total);
		$datos->set_activo($activo);
		if ($datos->registrar($usuario_editor)){
			$respuestas["codigo"] = $datos->get_compra_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($eliminados); $idx++){
				$producto = cls_Compra_Producto::Indice($eliminados[$idx]);
				$producto->eliminar($usuario_editor);
			}
			for ($idx=0; $idx<count($productos); $idx++){
				$producto_id = $productos[$idx]["producto_id"];
				$compra_producto_id = 0;
				if ($productos[$idx]["producto_id"] < 0){
					$producto_reg = new cls_Producto();
					$producto_reg->set_nombre($productos[$idx]["producto_nombre"]);
					$producto_reg->set_codigo($productos[$idx]["producto_codigo"]);
					$producto_reg->set_fabricante($productos[$idx]["producto_fabricante"]);
					$producto_reg->set_modelo($productos[$idx]["producto_modelo"]);
					$producto_reg->set_serie($productos[$idx]["producto_serie"]);
					$producto_reg->set_stock_minimo(1);
					$producto_reg->set_estado("Activo");
					if (strlen(trim($productos[$idx]["producto_nombre"])) > 0){
						$producto_reg->registrar($usuario_editor);
						$producto_id = $producto_reg->get_producto_id();
					}
				}
				if ($producto_id > 0){
					$producto = cls_Compra_Producto::Indice($productos[$idx]["codigo"]);
					if ($producto->get_compra_producto_id() > 0 && $productos[$idx]["estado"] == "E"){
						$producto->eliminar($usuario_editor);
					} else if ($productos[$idx]["estado"] != "E") {
						$producto->set_compra_id($datos->get_compra_id());
						$producto->set_producto_id($producto_id);
						$producto->set_moneda_codigo($moneda_codigo);
						$producto->set_igv_porcentaje($igv_porcentaje);
						$producto->set_valor_ganancia($productos[$idx]["valor_ganancia"]);
						$producto->set_precio_compra($productos[$idx]["precio_compra"]);
						$producto->set_precio_venta($productos[$idx]["precio_venta"]);
						$producto->set_precio_minimo($productos[$idx]["precio_minimo"]);
						$producto->set_unidades($productos[$idx]["unidades"]);
						$producto->set_ubicacion($productos[$idx]["ubicacion"]);
						$correcto = $correcto and $producto->registrar($usuario_editor);
						$compra_producto_id = $producto->get_compra_producto_id();
					}
				}
				array_push($indices, array($productos[$idx]["indice"], $compra_producto_id, $producto_id));
			}
			$respuestas["indices"] = $indices;
			$respuestas["estado"] = "ok";
			if ($correcto){
				$respuestas["mensaje"] = "Los datos se cargaron correctamente";
			} else {
				$respuestas["mensaje"] = "Ocurrió un error registrando los productos";
			}
		} else {
			$respuestas["mensaje"] = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
}
function compra_almacenar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"])){
		$codigo = $_POST["buscar"];
		$usuario_editor = 0;
		if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = $_SESSION["usuario_editor"];
		}
		$datos = cls_Compra::Indice($codigo);
		if ($datos->get_compra_id() > 0){
			$productos = cls_Group_Compra_Producto::Compra($datos->get_compra_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				//$producto = new cls_Almacen_General();
				$f_producto_id = $productos->get_producto_id($idx);
				$f_precio_venta = $productos->get_precio_venta($idx);
				$f_precio_minimo = $productos->get_precio_minimo($idx);
				$producto = cls_Almacen_General::Producto($f_producto_id);
				$producto->set_compra_id($datos->get_compra_id());
				$producto->set_compra_producto_id($productos->get_compra_producto_id($idx));
				$producto->set_producto_id($productos->get_producto_id($idx));
				$producto->set_moneda_codigo($productos->get_moneda_codigo($idx));
				$producto->set_igv_porcentaje($productos->get_igv_porcentaje($idx));
				$producto->set_valor_ganancia($productos->get_valor_ganancia($idx));
				if ($productos->get_precio_compra($idx) > 0){
					$producto->set_precio_compra($productos->get_precio_compra($idx));
				}
				if ($productos->get_precio_venta($idx) > 0){
					$producto->set_precio_venta($productos->get_precio_venta($idx));
				}
				$producto->set_precio_minimo($productos->get_precio_minimo($idx));
				$producto->set_unidades($productos->get_unidades($idx) + $producto->get_unidades());
				$producto->set_ubicacion($productos->get_ubicacion($idx));
				$producto->set_tipo_movimiento("Ingreso Almacen");
				if ($producto->registrar($usuario_editor)){
					$control = new cls_Control_Movimiento();
					$control->set_control_movimiento_id(0);
					$control->set_tienda_id(0);
					$control->set_origen_id(-1);
					$control->set_almacen_general_id($producto->get_almacen_general_id());
					$control->set_almacen_tienda_id(0);
					$control->set_movimiento_id($datos->get_compra_id());
					$control->set_movimiento_producto_id($productos->get_compra_producto_id($idx));
					$control->set_producto_id($productos->get_producto_id($idx));
					$control->set_unidades($productos->get_unidades($idx));
					$control->set_tipo_movimiento("Compra");
					$control->set_estado("Ingreso");
					$control->set_movimiento_fecha($datos->get_fecha());
					$control->registrar($usuario_editor);
				}
			}
			$datos->set_estado_registro("Almacenado");
			$datos->registrar($usuario_editor);
			$respuestas["estado"]  = "ok";
			$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
		} else {
			$respuestas["mensaje"]  = "No se encontraron los datos de la compra.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function compra_almacenar_actualizacion(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0, "indices"=>array());
		$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"];
		}
		$fecha = $_POST["txt_fecha"];
		$operacion = $_POST["txt_operacion"];
		$comprobante = $_POST["txt_comprobante"];
		$numero = $_POST["txt_numero"];
		$proveedor_id = $_POST["txt_proveedor_id"];
		$responsable_id = $_POST["txt_responsable_id"];
		$estado_registro = $_POST["txt_estado_registro"];
		$observaciones = $_POST["txt_observaciones"];
		$costo_total = $_POST["txt_costo_total"];
		$moneda_codigo = $_POST["txt_moneda"];
		$igv_porcentaje = $_POST["txt_igv"];
		$productos = json_decode($_POST["txt_lista"], true);
		
		$datos = cls_Compra::Indice($codigo);
		$datos->set_fecha($fecha);
		$datos->set_operacion($operacion);
		$datos->set_comprobante($comprobante);
		$datos->set_numero($numero);
		$datos->set_proveedor_id($proveedor_id);
		$datos->set_responsable_id($responsable_id);
		$datos->set_moneda_codigo($moneda_codigo);
		$datos->set_igv_porcentaje($igv_porcentaje);
		$datos->set_estado_registro($estado_registro);
		$datos->set_observaciones($observaciones);
		$datos->set_costo_total($costo_total);
		$datos->set_activo($activo);
		if ($datos->registrar($usuario_editor)){
			$respuestas["codigo"] = $datos->get_compra_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($productos); $idx++){
				$producto = cls_Compra_Producto::Indice($productos[$idx]["codigo"]);
				$producto->set_compra_id($datos->get_compra_id());
				$producto->set_producto_id($productos[$idx]["producto_id"]);
				$producto->set_moneda_codigo($productos[$idx]["moneda_codigo"]);
				$producto->set_igv_porcentaje($productos[$idx]["igv_porcentaje"]);
				$producto->set_valor_ganancia($productos[$idx]["valor_ganancia"]);
				$producto->set_precio_compra($productos[$idx]["precio_compra"]);
				$producto->set_precio_venta($productos[$idx]["precio_venta"]);
				$producto->set_precio_minimo($productos[$idx]["precio_minimo"]);
				$producto->set_unidades($productos[$idx]["unidades"]);
				$producto->set_ubicacion($productos[$idx]["ubicacion"]);
				$correcto = $correcto and $producto->registrar($usuario_editor);
				
				$f_producto_id = $producto->get_producto_id();
				$f_precio_venta = $producto->get_precio_venta();
				$f_precio_minimo = $producto->get_precio_minimo();
				$almacenado = cls_Almacen_General::ProductoPrecios($f_producto_id, $f_precio_venta, $f_precio_minimo);
				$almacenado->set_compra_id($datos->get_compra_id());
				$almacenado->set_compra_producto_id($producto->get_compra_producto_id());
				$almacenado->set_producto_id($producto->get_producto_id());
				$almacenado->set_moneda_codigo($producto->get_moneda_codigo());
				$almacenado->set_igv_porcentaje($producto->get_igv_porcentaje());
				$almacenado->set_valor_ganancia($producto->get_valor_ganancia());
				$almacenado->set_precio_compra($producto->get_precio_compra());
				$almacenado->set_precio_venta($producto->get_precio_venta());
				$almacenado->set_precio_minimo($producto->get_precio_minimo());
				$almacenado->set_unidades($almacenado->get_unidades() + $producto->get_unidades());
				$almacenado->set_ubicacion($producto->get_ubicacion());
				$almacenado->set_tipo_movimiento("Actualización Almacen");
				$almacenado->registrar($usuario_editor);
				
				array_push($indices, array($productos[$idx]["indice"], $producto->get_compra_producto_id()));
			}
			$respuestas["indices"] = $indices;
			$respuestas["estado"] = "ok";
			if ($correcto){
				$respuestas["mensaje"] = "Los datos se cargaron correctamente";
			} else {
				$respuestas["mensaje"] = "Ocurrió un error registrando los productos";
			}
		} else {
			$respuestas["mensaje"] = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
}
function compra_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_Compra::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"){
		compra_lista();
	} else if ($_POST["accion"] == "datos"){
		compra_datos();
    } else if ($_POST["accion"] == "registrar"){
		compra_registrar();
    } else if ($_POST["accion"] == "almacenar"){
		compra_almacenar();
    } else if ($_POST["accion"] == "almacenar_actualizacion"){
		compra_almacenar_actualizacion();
    } else if ($_POST["accion"] == "eliminar"){
		compra_eliminar();
	}
}
?>
