<?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_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_producto.php");

function venta_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"];
		}
		$datos = new cls_Group_Venta();
		if (isset($_POST["fecha_min"]) && isset($_POST["fecha_max"])){
			$fecha_min = $_POST["fecha_min"];
			$fecha_max = $_POST["fecha_max"];
			$datos = cls_Group_Venta::RangoFecha($tienda, $buscar, $fecha_min, $fecha_max, $ordendireccion);
		} else {
			$datos = cls_Group_Venta::TiendaEstado($tienda, $filtro_estado);
		}
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"venta_id"=>$datos->get_venta_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),
				"tipo_pago"=>$datos->get_tipo_pago($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),
				"venta_base_id"=>$datos->get_venta_base_id($idx),
				"venta_derivado_id"=>$datos->get_venta_derivado_id($idx),
				"base_comprobante"=>$datos->get_base_comprobante($idx),
				"base_serie"=>$datos->get_base_serie($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 venta_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_Venta();
		$datos = cls_Group_Venta::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(
				"venta_id"=>$datos->get_venta_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),
				"tipo_pago"=>$datos->get_tipo_pago($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),
				"venta_base_id"=>$datos->get_venta_base_id($idx),
				"venta_derivado_id"=>$datos->get_venta_derivado_id($idx),
				"base_comprobante"=>$datos->get_base_comprobante($idx),
				"base_serie"=>$datos->get_base_serie($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 venta_datos(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"])){
			$codigo = $_POST["buscar"];
			$datos = cls_Venta::Indice($codigo);
			$productos_devueltos = array();
			if (strlen($datos->get_venta_derivado_id()) > 0){
				$lista_derivados = explode(",", $datos->get_venta_derivado_id());
				for ($idx=0; $idx<count($lista_derivados); $idx++){
					$datos_derivados = cls_Venta::Indice($lista_derivados[$idx]);
					if ($datos_derivados->get_comprobante_tipo() == "Nota de Devolución"){
						$productos_derivados = cls_Group_Venta_Producto::Venta($datos_derivados->get_venta_id());
						$productos_derivados->cargar_datos(0, 0);
						for ($idy=0; $idy<$productos_derivados->get_cantidad_cargados(); $idy++){
							$unidades_devuelto = 0;
							if (isset($productos_devueltos[$productos_derivados->get_producto_id($idy)])){
								$unidades_devuelto = $productos_devueltos[$productos_derivados->get_producto_id($idy)];
							}
							$productos_devueltos[$productos_derivados->get_producto_id($idy)] = $unidades_devuelto+$productos_derivados->get_unidades($idy);
						}
					}
				}
			}
			
			
			$productos = cls_Group_Venta_Producto::Venta($datos->get_venta_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 Venta"){
					$unidades_actuales = $unidades_actuales - $productos_devueltos[$productos->get_producto_id($idx)];
				}
				array_push($lista, array(
					"venta_producto_id"=>$productos->get_venta_producto_id($idx),
					"venta_id"=>$productos->get_venta_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_minimo"=>$productos->get_precio_minimo($idx),
					"precio_subtotal"=>$productos->get_precio_subtotal($idx),
					"stock"=>$productos->get_stock($idx),
				));
			}
			$respuestas["datos"] = array(
					"venta_id"=>$datos->get_venta_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),
					"tipo_pago"=>$datos->get_tipo_pago($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,
				"venta_base_id"=>$datos->get_venta_base_id(),
				"venta_derivado_id"=>$datos->get_venta_derivado_id(),
				"base_comprobante"=>$datos->get_base_comprobante(),
				"base_serie"=>$datos->get_base_serie(),
			);
			$respuestas["estado"]  = "ok";
			$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
		} else {
			$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
		}
		echo(json_encode($respuestas));
}
function venta_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"];
		}
		$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"];
		$tipo_pago = $_POST["txt_tipo_pago"];
		$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"];
		
		$datos = cls_Venta::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_tipo_pago($tipo_pago);
		$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->registrar($usuario_editor)){
			$respuestas["codigo"] = $datos->get_venta_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($eliminados); $idx++){
				$producto = cls_Venta_Producto::Indice($eliminados[$idx]);
				$producto->eliminar($usuario_editor);
			}
			for ($idx=0; $idx<count($productos); $idx++){
				$producto = cls_Venta_Producto::Indice($productos[$idx]["codigo"]);
				$producto->set_venta_id($datos->get_venta_id());
				$producto->set_tienda_id($datos->get_tienda_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;
				}
				/*if ($producto->registrar($usuario_editor)){
					$almacenado = cls_Almacen_Tienda::Indice($productos[$idx]["almacen_id"]);
					$n_unidades = $almacenado->get_unidades() - $productos[$idx]["unidades"];
					if ($n_unidades < 0){
						$n_unidades = 0;
					}
					$almacenado->set_unidades($n_unidades);
					$almacenado->registrar($usuario_editor);
					$correcto = true;
				} else {
					$correcto = false;
				}*/
				
				array_push($indices, array($productos[$idx]["indice"], $producto->get_venta_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 venta_completar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	$stock_suficiente = true;
	$productos_insuficientes = array();
	if (isset($_POST["buscar"])){
		$codigo = $_POST["buscar"];
		$usuario_editor = 0;
		if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = $_SESSION["usuario_editor"];
		}
		$datos = cls_Venta::Indice($codigo);
		
		$observaciones = $datos->get_observaciones();
		if (strlen($observaciones) > 0){
			$observaciones = json_decode($observaciones, true);
			if (isset($observaciones["comprobante_numero"]) && $observaciones["comprobante_numero"] == true){
			} else {
				$tienda = cls_Tienda::Indice($datos->get_tienda_id());
				$observaciones = $tienda->get_observaciones();
				$observaciones = json_decode($observaciones, true);
				$_serie = $tienda->get_tienda_id();
				$_numeracion = 1;
				if (isset($observaciones["notaventa_serie"]) && isset($observaciones["notaventa_numeracion"])){
					$_serie = $observaciones["notaventa_serie"];
					$_numeracion = $observaciones["notaventa_numeracion"];
				}
				$observaciones["notaventa_serie"] = $_serie;
				$observaciones["notaventa_numeracion"] = $_numeracion+1;
				$tienda->set_observaciones(json_encode($observaciones));
				$tienda->registrar($usuario_editor);
				$datos->set_comprobante_numero(str_pad($_serie, 3, "0", STR_PAD_LEFT) . "-" . str_pad($_numeracion, 5, "0", STR_PAD_LEFT));
				
				
			}
		}
		if ($datos->get_venta_id() > 0 && $datos->get_estado_registro() == "Pendiente"){
			$productos = cls_Group_Venta_Producto::Venta($datos->get_venta_id());
			$productos->cargar_datos(0, 0);
			$reload = false;
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				$producto_origen = cls_Almacen_Tienda::Indice($productos->get_almacen_tienda_id($idx));
				if ($producto_origen->get_almacen_tienda_id() == 0){
					$producto_origen = cls_Almacen_Tienda::Producto($datos->get_tienda_id(), $productos->get_producto_id($idx));
					if ($producto_origen->get_almacen_tienda_id() > 0){
						$nuevo_producto = cls_Venta_Producto::Indice($productos->get_venta_producto_id($idx));
						$nuevo_producto->set_almacen_tienda_id($producto_origen->get_almacen_tienda_id($idx));
						$nuevo_producto->registrar($usuario_editor);
						$reload = true;
					}
				}
				if ($producto_origen->get_unidades() < $productos->get_unidades($idx)){
					$stock_suficiente = false;
					if (strlen($producto_origen->get_producto_nombre())== 0){
						$pr = cls_Producto::Indice($productos->get_producto_id($idx));
						array_push($productos_insuficientes, "No hay stock suficiente de ".$pr->get_nombre());
					} else {
						array_push($productos_insuficientes, "No hay stock suficiente de ".$producto_origen->get_producto_nombre());
					}
				}
			}
			if ($reload){
				$productos = cls_Group_Venta_Producto::Venta($datos->get_venta_id());
			}
			if ($stock_suficiente){
				$lista = array();
				for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
					$almacenado = cls_Almacen_Tienda::Indice($productos->get_almacen_tienda_id($idx));
					$n_unidades = $almacenado->get_unidades() - $productos->get_unidades($idx);
					if ($n_unidades < 0){
						$n_unidades = 0;
					}
					$almacenado->set_unidades($n_unidades);
					if($almacenado->registrar($usuario_editor)){
						$control = new cls_Control_Movimiento();
						$control->set_control_movimiento_id(0);
						$control->set_tienda_id($datos->get_tienda_id());
						$control->set_origen_id(-1);
						$control->set_almacen_general_id($productos->get_almacen_id($idx));
						$control->set_almacen_tienda_id($productos->get_almacen_tienda_id($idx));
						$control->set_movimiento_id($datos->get_venta_id());
						$control->set_movimiento_producto_id($productos->get_venta_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Venta");
						$control->set_estado("Salida");
						$control->set_movimiento_fecha($datos->get_fecha()." ".$datos->get_hora());
						$control->registrar($usuario_editor);
					}
				}
				$datos->set_estado_registro("Completado");
				$datos->registrar($usuario_editor);
				$respuestas["estado"]  = "ok";
				$respuestas["mensaje"]  = "Los datos se cargaron correctamente";
			} else {
				$respuestas["mensaje"] = implode(", <br />", $productos_insuficientes);
			}
		} 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 venta_vincular_venta(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["txt_codigo"]) && isset($_POST["txt_tienda"]) && $_SESSION["usuario_editor"]){
		$datos = cls_Venta::Indice($_POST["txt_codigo"]);
		if (($_POST["txt_codigo"] == 0 || $datos->get_venta_id() == $_POST["txt_codigo"]) && $datos->get_venta_id() > 0){
			$usuario_editor = $_SESSION["usuario_editor"];
			$fecha = $_POST["txt_fecha"];
			$hora = $_POST["txt_hora"];
			$fecha = date("Y-m-d");
			$hora = date("H:i:s");
			$nueva_venta = $datos->Duplicar();
			$nueva_venta->set_tienda_id($_POST["txt_tienda"]);
			$nueva_venta->set_vendedor_id($usuario_editor);
			$nueva_venta->set_fecha($fecha);
			$nueva_venta->set_hora($hora);
			$nueva_venta->set_comprobante_tipo("Nota de Venta");
			$nueva_venta->set_comprobante_numero("");
			$nueva_venta->set_tipo_pago("Efectivo");
			$nueva_venta->set_costo_subtotal(0);
			$nueva_venta->set_costo_igv(0);
			$nueva_venta->set_costo_total(0);
			$nueva_venta->set_estado_registro("Pendiente");
			$nueva_venta->set_observaciones("");
			$nueva_venta->set_venta_base_id($datos->get_venta_id());
			$nueva_venta->set_venta_derivado_id("");
			if ($nueva_venta->registrar($usuario_editor)){
				if (strlen($datos->get_venta_derivado_id()) > 0){
					$datos->set_venta_derivado_id($datos->get_venta_derivado_id().",".$nueva_venta->get_venta_id());
				} else {
					$datos->set_venta_derivado_id($nueva_venta->get_venta_id());
				}
				$datos->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 venta_devolver_venta(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>"0");
	if (isset($_POST["txt_codigo"]) && isset($_POST["txt_tienda"]) && $_SESSION["usuario_editor"]){
		$usuario_editor = $_SESSION["usuario_editor"];
		$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"];
		$tipo_pago = $_POST["txt_tipo_pago"];
		$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"];
		$datos = cls_Venta::Indice($_POST["txt_codigo"]);
		if (($_POST["txt_codigo"] == 0 || $datos->get_venta_id() == $_POST["txt_codigo"]) && $datos->get_venta_id() > 0){
			$usuario_editor = $_SESSION["usuario_editor"];
			$tienda = cls_Tienda::Indice($tienda_id);
			$observaciones_tienda = array();
			if (strlen($tienda->get_observaciones()) > 0){
				$observaciones_tienda = json_decode($tienda->get_observaciones(), true);
			}
			$_serie = $tienda->get_tienda_id();
			$_numeracion = 1;
			if (isset($observaciones_tienda["notadevolucion_serie"])){
				$_serie = $observaciones_tienda["notadevolucion_serie"];
			}
			if (isset($observaciones_tienda["notadevolucion_numeracion"])){
				$_numeracion = $observaciones_tienda["notadevolucion_numeracion"];
			}
			$observaciones_tienda["notadevolucion_serie"] = $_serie;
			$observaciones_tienda["notadevolucion_numeracion"] = $_numeracion+1;
			
			$observaciones_devolucion = $observaciones;
			if (strlen($observaciones_devolucion) > 0){
				$observaciones_devolucion = json_decode($observaciones_devolucion, true);
			}
			$observaciones_devolucion["comprobante_numero"] = false;
			$observaciones_devolucion["sub_estado"] = "Completado";
			$observaciones_devolucion["comprobante_origen"] = $datos->get_venta_id();
			$observaciones_devolucion["total_anterior"] = $datos->get_costo_total();
			$n_venta = $datos->Duplicar();
			$n_venta->set_venta_id(0);
			$n_venta->set_tienda_id($tienda_id);
			$n_venta->set_vendedor_id($vendedor_id);
			$n_venta->set_venta_base_id($datos->get_venta_id());
			$n_venta->set_venta_derivado_id("");
			$n_venta->set_fecha($fecha);
			$n_venta->set_hora($hora);
			$n_venta->set_comprobante_tipo($comprobante_tipo);
			$n_venta->set_tipo_pago($tipo_pago);
			$n_venta->set_moneda_codigo($txt_moneda);
			$n_venta->set_igv_porcentaje($txt_igv);
			$n_venta->set_costo_subtotal($costo_subtotal);
			$n_venta->set_costo_igv($costo_igv);
			$n_venta->set_costo_total($costo_total);
			$n_venta->set_estado_registro($estado_registro);
			$n_venta->set_observaciones(json_encode($observaciones_devolucion));
			$n_venta->set_comprobante_numero(str_pad($_serie, 3, "0", STR_PAD_LEFT) . "-" . str_pad($_numeracion, 5, "0", STR_PAD_LEFT));
			if($n_venta->registrar($usuario_editor)){
				$tienda->set_observaciones(json_encode($observaciones_tienda));
				$tienda->registrar($usuario_editor);
				$observaciones_venta = array();
				if (strlen($datos->get_observaciones()) > 0){
					$observaciones_venta = json_decode($datos->get_observaciones(), true);
				}
				$comprobantes_actualizados = array();
				if (isset($observaciones_venta["comprobante_actualizado"])){
					$comprobantes_actualizados = $observaciones_venta["comprobante_actualizado"];
				}
				array_push($observaciones_venta, $n_venta->get_venta_id());
				$observaciones_venta["comprobante_actualizado"] = $comprobantes_actualizados;
				$observaciones_venta["sub_estado"] = "Editado";
				$datos->set_estado_registro("Completado");
				if (strlen($datos->get_venta_derivado_id()) > 0){
					$datos->set_venta_derivado_id($datos->get_venta_derivado_id().",".$n_venta->get_venta_id());
				} else {
					$datos->set_venta_derivado_id($n_venta->get_venta_id());
				}
				$datos->set_observaciones(json_encode($observaciones_venta));
				$datos->registrar($usuario_editor);
				/*$productos = cls_Group_Venta_Producto::Venta($datos->get_venta_id());
				$productos->cargar_datos(0, 0);*/
				for ($idx=0; $idx<count($productos); $idx++){
					$producto = $productos[$idx]; //cls_Venta_Producto::Indice($productos->get_venta_producto_id($idx));
					if ($producto["devueltos"] > 0){
						$producto_devuelto = cls_Venta_Producto::Indice($producto["codigo"]);
						$producto_devuelto->set_venta_producto_id(0);
						$producto_devuelto->set_venta_id($n_venta->get_venta_id());
						$producto_devuelto->set_tienda_id($n_venta->get_tienda_id());
						$producto_devuelto->set_unidades($producto["devueltos"]);
						$producto_devuelto->set_precio_subtotal($producto["devueltos"] * $producto_devuelto->get_precio_venta());
						$producto_devuelto->registrar($usuario_editor);
						
						$almacenado = cls_Almacen_Tienda::Producto($tienda_id, $producto["producto_id"]);
						$n_unidades = $almacenado->get_unidades() + $producto["devueltos"];
						$almacenado->set_unidades($n_unidades);
						if($almacenado->registrar($usuario_editor)){
							$control = new cls_Control_Movimiento();
							$control->set_control_movimiento_id(0);
							$control->set_tienda_id($n_venta->get_tienda_id());
							$control->set_origen_id(-1);
							$control->set_almacen_general_id($almacenado->get_almacen_general_id());
							$control->set_almacen_tienda_id($almacenado->get_almacen_tienda_id());
							$control->set_movimiento_id($n_venta->get_venta_id());
							$control->set_movimiento_producto_id($producto_devuelto->get_venta_producto_id());
							$control->set_producto_id($producto_devuelto->get_producto_id());
							$control->set_unidades($producto_devuelto->get_unidades());
							$control->set_tipo_movimiento("Devolución de venta");
							$control->set_estado("Ingreso");
							$control->set_movimiento_fecha($n_venta->get_fecha()." ".$n_venta->get_hora());
							$control->registrar($usuario_editor);
						}
					}
				}
				$respuestas["codigo"]  = $n_venta->get_venta_id();
				$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 venta_generar_notaventa_serie(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "numeroserie"=>"");
	if (isset($_POST["txt_tienda"]) && isset($_POST["txt_codigo"]) && isset($_SESSION["usuario_editor"])){
		$codigo = $_POST["txt_codigo"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Venta::Indice($codigo);
		$observaciones_venta = $datos->get_observaciones();
		$observaciones_venta = json_decode($observaciones_venta, true);
		if ($datos->get_venta_id() > 0 && $datos->get_tienda_id() == $_POST["txt_tienda"]){
			$tienda = cls_Tienda::Indice($datos->get_tienda_id());
			$observaciones = $tienda->get_observaciones();
			$observaciones = json_decode($observaciones, true);
			$_serie = $tienda->get_tienda_id();
			$_numeracion = 1;
			if (isset($observaciones["notaventa_serie"]) && isset($observaciones["notaventa_numeracion"])){
				$_serie = $observaciones["notaventa_serie"];
				$_numeracion = $observaciones["notaventa_numeracion"];
			}
			$observaciones["notaventa_serie"] = $_serie;
			$observaciones["notaventa_numeracion"] = $_numeracion+1;
			$tienda->set_observaciones(json_encode($observaciones));
			$tienda->registrar($usuario_editor);
			$numeroserie = str_pad($_serie, 3, "0", STR_PAD_LEFT) . "-" . str_pad($_numeracion, 5, "0", STR_PAD_LEFT);
			$observaciones_venta["comprobante_numero"] = true;
			$datos->set_comprobante_numero($numeroserie);
			$datos->set_observaciones(json_encode($observaciones_venta));
			$datos->registrar($usuario_editor);
			$respuestas["numeroserie"]  = $numeroserie;
			$respuestas["estado"]  = "ok";
		} else {
			$respuestas["mensaje"]  = "No se encontraron los datos registrados de la venta.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function venta_eliminar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"");
	if (isset($_POST["buscar"]) && isset($_SESSION["usuario_editor"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["buscar"];
		$datos = cls_Venta::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_venta = cls_Venta::Indice($observaciones["comprobante_origen"]);
			unset($observaciones["sub_estado"]);
			unset($observaciones["comprobante_numero"]);
			$old_venta->set_observaciones(json_encode($observaciones));
			$old_venta->set_estado_registro("Completado");
			$old_venta->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"){
		venta_lista();
	} else if ($_POST["accion"] == "lista_fecha_estado"){
		venta_lista_fecha_estado();
	} else if ($_POST["accion"] == "datos"){
		venta_datos();
    } else if ($_POST["accion"] == "registrar"){
		venta_registrar();
    } else if ($_POST["accion"] == "completar"){
		venta_completar();
    } else if ($_POST["accion"] == "vincular_venta"){
		venta_vincular_venta();
    } else if ($_POST["accion"] == "devolver_venta"){
		venta_devolver_venta();
    } else if ($_POST["accion"] == "generar_notaventa_serie"){
		venta_generar_notaventa_serie();
    } else if ($_POST["accion"] == "eliminar"){
		venta_eliminar();
	}
}
?>
