<?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_tienda.php");
require_once("../clases/cls_proforma.php");
require_once("../clases/cls_proforma_producto.php");
require_once("../clases/cls_venta.php");
require_once("../clases/cls_venta_producto.php");
require_once("../clases/cls_almacen_tienda.php");
require_once("../clases/cls_control_movimiento.php");
require_once("../clases/cls_moneda.php");

function proforma_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"];
		$tienda = 0;
		$filtro_estado = "Todos";
		if (isset($_POST["filtro_estado"])){
			$filtro_estado = $_POST["filtro_estado"];
		}
		if (isset($_POST["filtro_tienda"])){
			$tienda = $_POST["filtro_tienda"];
		}
		if (isset($_POST["items_pagina"])){
			$items_pagina = $_POST["items_pagina"];
		}
		if (isset($_POST["items_cantidad"])){
			$items_cantidad = $_POST["items_cantidad"];
		}
		$fecha_min = $_POST["fecha_min"];
		$fecha_max = $_POST["fecha_max"];
		$datos = cls_Group_Proforma::RangoFechaEstado($tienda, $buscar, $fecha_min, $fecha_max, $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(
				"proforma_id"=>$datos->get_proforma_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"hora"=>$datos->get_hora($idx),
				"cliente_nombre"=>$datos->get_cliente_nombre($idx),
				"cliente_documento_tipo"=>$datos->get_cliente_documento_tipo($idx),
				"cliente_documento_numero"=>$datos->get_cliente_documento_numero($idx),
				"tienda_nombre"=>$datos->get_tienda_nombre($idx),
				"vendedor_nombres"=>$datos->get_vendedor_nombres($idx),
				"comprobante"=>$datos->get_comprobante_tipo($idx),
				"serie"=>$datos->get_comprobante_numero($idx),
				"observaciones"=>$datos->get_observaciones($idx),
				"subtotal"=>$datos->get_costo_subtotal($idx),
				"igv"=>$datos->get_costo_igv($idx),
				"total"=>$datos->get_costo_total($idx),
				"vendedor_nombres"=>$datos->get_vendedor_nombres($idx),
				"tienda_nombre"=>$datos->get_tienda_nombre($idx),
				"estado_registro"=>$datos->get_estado_registro($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 proforma_lista_fecha_estado(){
	$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"];
		$tienda = 0;
		$filtro_estado = "Todos";
		if (isset($_POST["filtro_estado"])){
			$filtro_estado = $_POST["filtro_estado"];
		}
		if (isset($_POST["filtro_tienda"])){
			$tienda = $_POST["filtro_tienda"];
		}
		if (isset($_POST["items_pagina"])){
			$items_pagina = $_POST["items_pagina"];
		}
		if (isset($_POST["items_cantidad"])){
			$items_cantidad = $_POST["items_cantidad"];
		}
		$fecha_min = $_POST["fecha_min"];
		$fecha_max = $_POST["fecha_max"];
		$datos = new cls_Group_Proforma();
		$datos = cls_Group_Proforma::RangoFechaEstado($tienda, $buscar, $fecha_min, $fecha_max, $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(
				"proforma_id"=>$datos->get_proforma_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"hora"=>$datos->get_hora($idx),
				"cliente_nombre"=>$datos->get_cliente_nombre($idx),
				"cliente_documento_tipo"=>$datos->get_cliente_documento_tipo($idx),
				"cliente_documento_numero"=>$datos->get_cliente_documento_numero($idx),
				"tienda_nombre"=>$datos->get_tienda_nombre($idx),
				"vendedor_nombres"=>$datos->get_vendedor_nombres($idx),
				"comprobante"=>$datos->get_comprobante_tipo($idx),
				"serie"=>$datos->get_comprobante_numero($idx),
				"observaciones"=>$datos->get_observaciones($idx),
				"subtotal"=>$datos->get_costo_subtotal($idx),
				"igv"=>$datos->get_costo_igv($idx),
				"total"=>$datos->get_costo_total($idx),
				"vendedor_nombres"=>$datos->get_vendedor_nombres($idx),
				"tienda_nombre"=>$datos->get_tienda_nombre($idx),
				"estado_registro"=>$datos->get_estado_registro($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 proforma_datos(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"])){
			$codigo = $_POST["buscar"];
			$datos = cls_Proforma::Indice($codigo);
			$productos_devueltos = array();
			$productos = cls_Group_Proforma_Producto::Proforma($datos->get_proforma_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				$unidades_actuales = $productos->get_unidades($idx);
				if (isset($productos_devueltos[$productos->get_producto_id($idx)]) && $datos->get_comprobante_tipo($idx) == "Nota de Proforma"){
					$unidades_actuales = $unidades_actuales - $productos_devueltos[$productos->get_producto_id($idx)];
				}
				array_push($lista, array(
					"proforma_producto_id"=>$productos->get_proforma_producto_id($idx),
					"proforma_id"=>$productos->get_proforma_id($idx),
					"moneda_codigo"=>$productos->get_moneda_codigo($idx),
					"moneda_simbolo"=>$productos->get_moneda_simbolo($idx),
					"moneda_cambio"=>$productos->get_moneda_cambio($idx),
					"igv_porcentaje"=>$productos->get_igv_porcentaje($idx),
					"tienda_id"=>$productos->get_tienda_id($idx),
					"fecha"=>$productos->get_fecha($idx),
					"hora"=>$productos->get_hora($idx),
					"almacen_id"=>$productos->get_almacen_id($idx),
					"almacen_tienda_id"=>$productos->get_almacen_tienda_id($idx),
					"producto_id"=>$productos->get_producto_id($idx),
					"producto_nombre"=>$productos->get_producto_nombre($idx),
					"producto_imagen"=>$productos->get_imagen($idx),
					"producto_codigo"=>$productos->get_codigo($idx),
					"producto_codigo_barras"=>$productos->get_codigo_barras($idx),
					"fabricante"=>$productos->get_fabricante($idx),
					"modelo"=>$productos->get_modelo($idx),
					"serie"=>$productos->get_serie($idx),
					"unidades"=>$unidades_actuales,
					"precio_almacen"=>$productos->get_precio_almacen($idx),
					"precio_venta"=>$productos->get_precio_venta($idx),
					"precio_subtotal"=>$productos->get_precio_subtotal($idx),
					"stock"=>$productos->get_stock($idx),
				));
			}
			$respuestas["datos"] = array(
					"proforma_id"=>$datos->get_proforma_id(),
					"tienda_id"=>$datos->get_tienda_id($idx),
					"tienda_nombre"=>$datos->get_tienda_nombre($idx),
					"tienda_imagen"=>$datos->get_tienda_imagen($idx),
					"tienda_ubicacion"=>$datos->get_tienda_ubicacion($idx),
					"tienda_telefono"=>$datos->get_tienda_telefono($idx),
					"tienda_observaciones"=>$datos->get_tienda_observaciones($idx),
					"vendedor_id"=>$datos->get_vendedor_id($idx),
					"vendedor_tipo"=>$datos->get_vendedor_tipo($idx),
					"vendedor_usuario"=>$datos->get_vendedor_usuario($idx),
					"vendedor_foto"=>$datos->get_vendedor_foto($idx),
					"vendedor_nombres"=>$datos->get_vendedor_nombres($idx),
					"vendedor_dni"=>$datos->get_vendedor_dni($idx),
					"vendedor_telefono"=>$datos->get_vendedor_telefono($idx),
					"vendedor_correo"=>$datos->get_vendedor_correo($idx),
					"vendedor_direccion"=>$datos->get_vendedor_direccion($idx),
					"fecha"=>$datos->get_fecha($idx),
					"hora"=>$datos->get_hora($idx),
					"cliente_nombre"=>$datos->get_cliente_nombre($idx),
					"cliente_documento_tipo"=>$datos->get_cliente_documento_tipo($idx),
					"cliente_documento_numero"=>$datos->get_cliente_documento_numero($idx),
					"comprobante_tipo"=>$datos->get_comprobante_tipo($idx),
					"comprobante_numero"=>$datos->get_comprobante_numero($idx),
					"observaciones"=>$datos->get_observaciones($idx),
					"costo_subtotal"=>$datos->get_costo_subtotal($idx),
					"costo_igv"=>$datos->get_costo_igv($idx),
					"costo_total"=>$datos->get_costo_total($idx),
					"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 proforma_registrar(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0, "indices"=>array(), "numeroserie"=>"");
		$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"];
		}
		$tienda_id = $_POST["txt_tienda"];
		$vendedor_id = $usuario_editor;
		$fecha = $_POST["txt_fecha"];
		$hora = $_POST["txt_hora"];
		$cliente = $_POST["txt_cliente"];
		$cliente_documento_tipo = $_POST["txt_cliente_documento_tipo"];
		$cliente_documento_numero = $_POST["txt_cliente_documento_numero"];
		$comprobante_tipo = $_POST["txt_comprobante_tipo"];
		$comprobante_numero = $_POST["txt_comprobante_numero"];
		$txt_moneda = $_POST["txt_moneda"];
		$txt_igv = $_POST["txt_igv"];
		$costo_subtotal = $_POST["txt_costo_subtotal"];
		$costo_igv = $_POST["txt_costo_igv"];
		$costo_total = $_POST["txt_costo_total"];
		$observaciones = $_POST["txt_observaciones"];
		$productos = json_decode($_POST["txt_lista"], true);
		$eliminados = json_decode($_POST["txt_eliminado"], true);
		$estado_registro = $_POST["txt_estado_registro"];
		$_numero_serie = "";
		
		$datos = cls_Proforma::Indice($codigo);
		$datos->set_tienda_id($tienda_id);
		$datos->set_vendedor_id($vendedor_id);
		$datos->set_fecha($fecha);
		$datos->set_hora($hora);
		$datos->set_cliente_nombre($cliente);
		$datos->set_cliente_documento_tipo($cliente_documento_tipo);
		$datos->set_cliente_documento_numero($cliente_documento_numero);
		$datos->set_comprobante_tipo($comprobante_tipo);
		$datos->set_comprobante_numero($comprobante_numero);
		$datos->set_moneda_codigo($txt_moneda);
		$datos->set_igv_porcentaje($txt_igv);
		$datos->set_costo_subtotal($costo_subtotal);
		$datos->set_costo_igv($costo_igv);
		$datos->set_costo_total($costo_total);
		$datos->set_estado_registro($estado_registro);
		$datos->set_observaciones($observaciones);
		$datos->set_activo($activo);
		if ($datos->get_proforma_id() == 0){
			$tienda = cls_Tienda::Indice($datos->get_tienda_id());
			$observaciones = $tienda->get_observaciones();
			if (strlen($observaciones ) > 0){
				$observaciones = json_decode($observaciones, true);
			} else {
				$observaciones = array();
			}
			$_serie = $tienda->get_tienda_id();
			$_numeracion = 1;
			if (isset($observaciones["proforma_serie"]) && isset($observaciones["proforma_numeracion"])){
				$_serie = $observaciones["proforma_serie"];
				$_numeracion = $observaciones["proforma_numeracion"];
			}
			$observaciones["proforma_serie"] = $_serie;
			$observaciones["proforma_numeracion"] = $_numeracion+1;
			$tienda->set_observaciones(json_encode($observaciones));
			$tienda->registrar($usuario_editor);
			if (strlen($_serie) > 0){
				$_numero_serie = str_pad($_serie, 3, "0", STR_PAD_LEFT) . "-" . str_pad($_numeracion, 5, "0", STR_PAD_LEFT);
				$datos->set_comprobante_numero($_numero_serie);
			} else {
				$_numero_serie = str_pad($_numeracion, 5, "0", STR_PAD_LEFT);
				$datos->set_comprobante_numero($_numero_serie);
			}
			$respuestas["numeroserie"] = $_numero_serie;
		}
		if ($datos->registrar($usuario_editor)){
			$respuestas["codigo"] = $datos->get_proforma_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($eliminados); $idx++){
				$producto = cls_Proforma_Producto::Indice($eliminados[$idx]);
				$producto->eliminar($usuario_editor);
			}
			for ($idx=0; $idx<count($productos); $idx++){
				$producto = cls_Proforma_Producto::Indice($productos[$idx]["codigo"]);
				$producto->set_proforma_id($datos->get_proforma_id());
				//$producto->set_igv_id($productos[$idx]["igv_id"]);
				$producto->set_almacen_id($productos[$idx]["almacen_general_id"]);
				$producto->set_almacen_tienda_id($productos[$idx]["almacen_tienda_id"]);
				$producto->set_producto_id($productos[$idx]["producto_id"]);
				$producto->set_unidades($productos[$idx]["unidades"]);
				$producto->set_precio_almacen($productos[$idx]["precio_almacen"]);
				$producto->set_precio_venta($productos[$idx]["precio_venta"]);
				$producto->set_precio_subtotal($productos[$idx]["precio_subtotal"]);
				if ($producto->registrar($usuario_editor)){
					$correcto = true;
				} else {
					$correcto = false;
				}
				array_push($indices, array($productos[$idx]["indice"], $producto->get_proforma_producto_id()));
			}
			$respuestas["codigo"] = $datos->get_proforma_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 proforma_generar_venta(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["txt_codigo"]) && isset($_POST["txt_tienda"]) && $_SESSION["usuario_editor"]){
		$datos = cls_Proforma::Indice($_POST["txt_codigo"]);
		if (($_POST["txt_codigo"] == 0 || $datos->get_proforma_id() == $_POST["txt_codigo"]) && $datos->get_proforma_id() > 0){
			$productos = cls_Group_Proforma_Producto::Proforma($datos->get_proforma_id());
			$moneda = cls_Moneda::Codigo($datos->get_moneda_codigo());
			$usuario_editor = $_SESSION["usuario_editor"];
			$venta_observaciones = array(
				"proforma"=>$datos->get_proforma_id(),
				"comprobante_numero"=>false,
				"cambio"=>$moneda->get_cambio(),
			);
			$nueva_venta = new cls_Venta();
			date_default_timezone_set('America/Lima');
			$fecha = date("Y-m-d");
			$hora = date("H:i:s");
			$nueva_venta->set_venta_id(0);
			$nueva_venta->set_tienda_id($_POST["txt_tienda"]);
			$nueva_venta->set_vendedor_id($usuario_editor);
			$nueva_venta->set_venta_base_id(0);
			$nueva_venta->set_venta_derivado_id(0);
			$nueva_venta->set_fecha($fecha);
			$nueva_venta->set_hora($hora);
			$nueva_venta->set_cliente_nombre($datos->get_cliente_nombre());
			$nueva_venta->set_cliente_documento_tipo($datos->get_cliente_documento_tipo());
			$nueva_venta->set_cliente_documento_numero($datos->get_cliente_documento_numero());
			$nueva_venta->set_comprobante_tipo("Nota de Venta");
			$nueva_venta->set_comprobante_numero("");
			$nueva_venta->set_tipo_pago("Efectivo");
			$nueva_venta->set_moneda_codigo($datos->get_moneda_codigo());
			$nueva_venta->set_igv_porcentaje($datos->get_igv_porcentaje());
			$nueva_venta->set_observaciones(json_encode($venta_observaciones));
			$nueva_venta->set_costo_subtotal(0);
			$nueva_venta->set_costo_igv(0);
			$nueva_venta->set_costo_total(0);
			$nueva_venta->set_estado_registro("Pendiente");
			if ($nueva_venta->registrar($usuario_editor)){
				$productos->cargar_datos(0, 0);
				$costo_total = 0.0;
				for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
					$producto_origen = cls_Almacen_Tienda::Producto($_POST["txt_tienda"], $productos->get_producto_id($idx));
					
					$producto = new cls_Venta_Producto();
					$producto->set_venta_id($nueva_venta->get_venta_id());
					//$producto->set_igv_id($productos[$idx]["igv_id"]);
					$producto->set_almacen_id($producto_origen->get_almacen_general_id($idx));
					$producto->set_almacen_tienda_id($producto_origen->get_almacen_tienda_id($idx));
					$producto->set_producto_id($productos->get_producto_id($idx));
					$producto->set_unidades($productos->get_unidades($idx));
					$producto->set_precio_almacen($productos->get_precio_almacen($idx));
					$producto->set_precio_venta($productos->get_precio_venta($idx));
					$producto->set_precio_subtotal($productos->get_precio_subtotal($idx));
					$producto->registrar($usuario_editor);
					$costo_total = $costo_total + $productos->get_precio_subtotal($idx);
				}
				$nueva_venta->set_costo_subtotal($costo_total - ($costo_total*0.18));
				$nueva_venta->set_costo_igv($costo_total*0.18);
				$nueva_venta->set_costo_total($costo_total);
				$nueva_venta->registrar($usuario_editor);
				$respuestas["estado"]  = "ok";
				$respuestas["mensaje"]  = "Los datos se actualizaron correctamente";
			} else {
				$respuestas["mensaje"]  = "No se pudo actualizar los datos correctamente";
			}
		} else {
			$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function proforma_eliminar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["buscar"]) && isset($_SESSION["usuario_editor"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["buscar"];
		$datos = cls_Proforma::Indice($codigo);
		$observaciones = array();
		if (strlen($datos->get_observaciones()) > 0){
			$observaciones = json_decode($datos->get_observaciones(), true);
		}
		if (isset($observaciones["sub_estado"]) && $observaciones["sub_estado"] == "Completado" && isset($observaciones["comprobante_origen"])){
			$old_proforma = cls_Proforma::Indice($observaciones["comprobante_origen"]);
			unset($observaciones["sub_estado"]);
			unset($observaciones["comprobante_numero"]);
			$old_proforma->set_observaciones(json_encode($observaciones));
			$old_proforma->set_estado_registro("Completado");
			$old_proforma->registrar($usuario_editor);
		}
		if ($datos->eliminar($usuario_editor)){
			$datos->set_estado_registro("Cancelado");
			$datos->registrar($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"){
		proforma_lista();
	} else if ($_POST["accion"] == "lista_fecha_estado"){
		proforma_lista_fecha_estado();
	} else if ($_POST["accion"] == "datos"){
		proforma_datos();
    } else if ($_POST["accion"] == "registrar"){
		proforma_registrar();
    } else if ($_POST["accion"] == "completar"){
		proforma_completar();
    } else if ($_POST["accion"] == "generar_venta"){
		proforma_generar_venta();
    } else if ($_POST["accion"] == "eliminar"){
		proforma_eliminar();
	}
}
?>
