<?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_usuario.php");
require_once("../clases/cls_producto.php");
require_once("../clases/cls_movimiento.php");
require_once("../clases/cls_movimiento_producto.php");
require_once("../clases/cls_almacen_general.php");
require_once("../clases/cls_almacen_tienda.php");
require_once("../clases/cls_control_movimiento.php");

function movimiento_lista_almacen_general(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$origen = -1;
		$buscar = $_POST["buscar"];
		$ordendireccion = $_POST["orden"];
		$filtro_estado = "Todos";
		$filtro_movimiento = "todos";
		if (isset($_POST["filtro_estado"])){
			$filtro_estado = $_POST["filtro_estado"];
		}
		if (isset($_POST["filtro_movimiento"])){
			$filtro_movimiento = $_POST["filtro_movimiento"];
		}
		if (isset($_POST["items_pagina"])){
			$items_pagina = $_POST["items_pagina"];
		}
		if (isset($_POST["items_cantidad"])){
			$items_cantidad = $_POST["items_cantidad"];
		}
		$datos = new cls_Group_Movimiento();
		$lista = array();
		if ($filtro_movimiento == "enviados" || $filtro_movimiento == "todos"){
			$datos = cls_Group_Movimiento::EnviadosEstadoRegistro(0, $filtro_estado, $ordendireccion);
			$datos->cargar_datos($items_pagina, $items_cantidad);
			for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
				$origen_nombre = $datos->get_origen_nombre($idx);
				$destino_nombre = $datos->get_destino_nombre($idx);
				if ($datos->get_origen_id($idx) == 0){
					$origen_nombre = "Almacen General";
				}
				if ($datos->get_destino_id($idx) == 0){
					$destino_nombre = "Almacen General";
				}
				array_push($lista, array(
					"movimiento_id"=>$datos->get_movimiento_id($idx),
					"fecha"=>$datos->get_fecha($idx),
					"origen_id"=>$datos->get_origen_id($idx),
					"origen_nombre"=>$origen_nombre,
					"origen_imagen"=>$datos->get_origen_imagen($idx),
					"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
					"origen_telefono"=>$datos->get_origen_telefono($idx),
					"hora"=>$datos->get_hora($idx),
					"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
					"destino_id"=>$datos->get_destino_id($idx),
					"destino_nombre"=>$destino_nombre,
					"destino_imagen"=>$datos->get_destino_imagen($idx),
					"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
					"destino_telefono"=>$datos->get_destino_telefono($idx),
					"estado_registro"=>$datos->get_estado_registro($idx),
					"estado_proceso"=>$datos->get_estado_proceso($idx),
				));
			}
		}
		if ($filtro_movimiento == "recibidos" || $filtro_movimiento == "todos"){
			$datos = cls_Group_Movimiento::RecibidosEstadoRegistro(0, $filtro_estado, $ordendireccion);
			$datos->cargar_datos($items_pagina, $items_cantidad);
			for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
				$origen_nombre = $datos->get_origen_nombre($idx);
				$destino_nombre = $datos->get_destino_nombre($idx);
				if ($datos->get_origen_id($idx) == 0){
					$origen_nombre = "Almacen General";
				}
				if ($datos->get_destino_id($idx) == 0){
					$destino_nombre = "Almacen General";
				}
				array_push($lista, array(
					"movimiento_id"=>$datos->get_movimiento_id($idx),
					"fecha"=>$datos->get_fecha($idx),
					"origen_id"=>$datos->get_origen_id($idx),
					"origen_nombre"=>$origen_nombre,
					"origen_imagen"=>$datos->get_origen_imagen($idx),
					"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
					"origen_telefono"=>$datos->get_origen_telefono($idx),
					"hora"=>$datos->get_hora($idx),
					"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
					"destino_id"=>$datos->get_destino_id($idx),
					"destino_nombre"=>$destino_nombre,
					"destino_imagen"=>$datos->get_destino_imagen($idx),
					"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
					"destino_telefono"=>$datos->get_destino_telefono($idx),
					"estado_registro"=>$datos->get_estado_registro($idx),
					"estado_proceso"=>$datos->get_estado_proceso($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 movimiento_transferencias(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$origen = -1;
		$buscar = $_POST["buscar"];
		$ordendireccion = $_POST["orden"];
		$fecha_min = $_POST["fecha_min"];
		$fecha_max = $_POST["fecha_max"];
		$filtro_estado = "Todos";
		if (isset($_POST["filtro_tienda"])){
			$origen = $_POST["filtro_tienda"];
		}
		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 = cls_Group_Movimiento::Buscar($origen, $ordendireccion);
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"movimiento_id"=>$datos->get_movimiento_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"origen_id"=>$datos->get_origen_id($idx),
				"origen_nombre"=>$datos->get_origen_nombre($idx),
				"origen_imagen"=>$datos->get_origen_imagen($idx),
				"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
				"origen_telefono"=>$datos->get_origen_telefono($idx),
				"hora"=>$datos->get_hora($idx),
				"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
				"destino_id"=>$datos->get_destino_id($idx),
				"destino_nombre"=>$datos->get_destino_nombre($idx),
				"destino_imagen"=>$datos->get_destino_imagen($idx),
				"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
				"destino_telefono"=>$datos->get_destino_telefono($idx),
				"estado_registro"=>$datos->get_estado_registro($idx),
				"estado_proceso"=>$datos->get_estado_proceso($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 movimiento_pedidos_recibidos(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$filtro_tienda = $_POST["filtro_tienda"];
		$buscar = $_POST["buscar"];
		$ordendireccion = $_POST["orden"];
		$fecha_min = $_POST["fecha_min"];
		$fecha_max = $_POST["fecha_max"];
		$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_Movimiento();
		if (isset($_POST["origen"])){
			$origen = $_POST["origen"];
		} else {
		}
		$datos = new cls_Group_Movimiento();
		$datos = cls_Group_Movimiento::RecibidosFechaEstadoRegistro($filtro_tienda, $fecha_min, $fecha_max);
		//$datos = cls_Group_Movimiento::TransferenciasRangoFechaEstadoRegistroTotal(-1, $filtro_tienda, $fecha_min, $fecha_max);
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"movimiento_id"=>$datos->get_movimiento_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"origen_id"=>$datos->get_origen_id($idx),
				"origen_nombre"=>$datos->get_origen_nombre($idx),
				"origen_imagen"=>$datos->get_origen_imagen($idx),
				"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
				"origen_telefono"=>$datos->get_origen_telefono($idx),
				"hora"=>$datos->get_hora($idx),
				"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
				"destino_id"=>$datos->get_destino_id($idx),
				"destino_nombre"=>$datos->get_destino_nombre($idx),
				"destino_imagen"=>$datos->get_destino_imagen($idx),
				"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
				"destino_telefono"=>$datos->get_destino_telefono($idx),
				"estado_registro"=>$datos->get_estado_registro($idx),
				"estado_proceso"=>$datos->get_estado_proceso($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 movimiento_pedidos_solicitados(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$filtro_tienda = $_POST["filtro_tienda"];
		$buscar = $_POST["buscar"];
		$ordendireccion = $_POST["orden"];
		$fecha_min = $_POST["fecha_min"];
		$fecha_max = $_POST["fecha_max"];
		$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_Movimiento();
		if (isset($_POST["origen"])){
			$origen = $_POST["origen"];
		} else {
		}
		$datos = new cls_Group_Movimiento();
		$datos = cls_Group_Movimiento::TransferenciasRangoFechaEstadoRegistroTotal($filtro_tienda, -1, $fecha_min, $fecha_max);
		$datos->cargar_datos($items_pagina, $items_cantidad);
		$lista = array();
		for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
			array_push($lista, array(
				"movimiento_id"=>$datos->get_movimiento_id($idx),
				"fecha"=>$datos->get_fecha($idx),
				"origen_id"=>$datos->get_origen_id($idx),
				"origen_nombre"=>$datos->get_origen_nombre($idx),
				"origen_imagen"=>$datos->get_origen_imagen($idx),
				"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
				"origen_telefono"=>$datos->get_origen_telefono($idx),
				"hora"=>$datos->get_hora($idx),
				"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
				"destino_id"=>$datos->get_destino_id($idx),
				"destino_nombre"=>$datos->get_destino_nombre($idx),
				"destino_imagen"=>$datos->get_destino_imagen($idx),
				"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
				"destino_telefono"=>$datos->get_destino_telefono($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 movimiento_lista(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_POST["orden"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$origen = -1;
		$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_Movimiento();
		if (isset($_POST["origen"])){
			$origen = $_POST["origen"];
		} else {
		}
		$datos = new cls_Group_Movimiento();
		$lista = array();
		if ($_POST["filtro_movimiento"] == "todos" || $_POST["filtro_movimiento"] == "recibidos"){
			if (isset($_POST["fecha_min"]) && isset($_POST["fecha_max"])){
				$datos = cls_Group_Movimiento::RecibidosFechaEstadoRegistro($origen, $_POST["fecha_min"], $_POST["fecha_max"], $filtro_estado, $ordendireccion);
			} else {
				$datos = cls_Group_Movimiento::RecibidosEstadoRegistro($origen, $filtro_estado, $ordendireccion);
			}
			$datos->cargar_datos($items_pagina, $items_cantidad);
			for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
				$origen_nombre = $datos->get_origen_nombre($idx);
				$destino_nombre = $datos->get_destino_nombre($idx);
				if ($datos->get_origen_id($idx) == 0){
					$origen_nombre = "Almacen General";
				}
				if ($datos->get_destino_id($idx) == 0){
					$destino_nombre = "Almacen General";
				}
				array_push($lista, array(
					"movimiento_id"=>$datos->get_movimiento_id($idx),
					"fecha"=>$datos->get_fecha($idx),
					"origen_id"=>$datos->get_origen_id($idx),
					"origen_nombre"=>$origen_nombre,
					"origen_imagen"=>$datos->get_origen_imagen($idx),
					"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
					"origen_telefono"=>$datos->get_origen_telefono($idx),
					"hora"=>$datos->get_hora($idx),
					"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
					"destino_id"=>$datos->get_destino_id($idx),
					"destino_nombre"=>$destino_nombre,
					"destino_imagen"=>$datos->get_destino_imagen($idx),
					"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
					"destino_telefono"=>$datos->get_destino_telefono($idx),
					"estado_registro"=>$datos->get_estado_registro($idx),
					"estado_proceso"=>$datos->get_estado_proceso($idx),
				));
			}
		}
		if ($_POST["filtro_movimiento"] == "todos" || $_POST["filtro_movimiento"] == "enviados"){
			if (isset($_POST["fecha_min"]) && isset($_POST["fecha_max"])){
				$datos = cls_Group_Movimiento::EnviadosFechaEstadoRegistro($origen, $_POST["fecha_min"], $_POST["fecha_max"], $filtro_estado, $ordendireccion);
			} else {
				$datos = cls_Group_Movimiento::EnviadosEstadoRegistro($origen, $filtro_estado, $ordendireccion);
			}
			$datos->cargar_datos($items_pagina, $items_cantidad);
			for ($idx=0; $idx<$datos->get_cantidad_cargados(); $idx++){
				$origen_nombre = $datos->get_origen_nombre($idx);
				$destino_nombre = $datos->get_destino_nombre($idx);
				if ($datos->get_origen_id($idx) == 0){
					$origen_nombre = "Almacen General";
				}
				if ($datos->get_destino_id($idx) == 0){
					$destino_nombre = "Almacen General";
				}
				array_push($lista, array(
					"movimiento_id"=>$datos->get_movimiento_id($idx),
					"fecha"=>$datos->get_fecha($idx),
					"origen_id"=>$datos->get_origen_id($idx),
					"origen_nombre"=>$origen_nombre,
					"origen_imagen"=>$datos->get_origen_imagen($idx),
					"origen_ubicacion"=>$datos->get_origen_ubicacion($idx),
					"origen_telefono"=>$datos->get_origen_telefono($idx),
					"hora"=>$datos->get_hora($idx),
					"tipo_movimiento"=>$datos->get_tipo_movimiento($idx),
					"destino_id"=>$datos->get_destino_id($idx),
					"destino_nombre"=>$destino_nombre,
					"destino_imagen"=>$datos->get_destino_imagen($idx),
					"destino_ubicacion"=>$datos->get_destino_ubicacion($idx),
					"destino_telefono"=>$datos->get_destino_telefono($idx),
					"estado_registro"=>$datos->get_estado_registro($idx),
					"estado_proceso"=>$datos->get_estado_proceso($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 movimiento_datos(){
		$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
		if (isset($_POST["buscar"])){
			$codigo = $_POST["buscar"];
			$datos = cls_Movimiento::Indice($codigo);
			$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				array_push($lista, array(
					"movimiento_producto_id"=>$productos->get_movimiento_producto_id($idx),
					"movimiento_id"=>$productos->get_movimiento_id($idx),
					"almacen_id"=>$productos->get_almacen_id($idx),
					"producto_id"=>$productos->get_producto_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),
					"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),
					"fecha_vencimiento"=>$productos->get_fecha_vencimiento($idx),
					"nombre"=>$productos->get_nombre($idx),
					"producto_codigo"=>$productos->get_codigo($idx),
					"producto_fabricante"=>$productos->get_fabricante($idx),
					"producto_modelo"=>$productos->get_modelo($idx),
					"producto_serie"=>$productos->get_serie($idx),
				));
			}
			$origen_nombre = $datos->get_origen_nombre();
			$destino_nombre = $datos->get_destino_nombre();
			if ($datos->get_origen_id($idx) == 0){
				$origen_nombre = "Almacen General";
			}
			if ($datos->get_destino_id($idx) == 0){
				$destino_nombre = "Almacen General";
			}
			$respuestas["datos"] = array(
				"movimiento_id"=>$datos->get_movimiento_id(),
				"fecha"=>$datos->get_fecha(),
				"origen_id"=>$datos->get_origen_id(),
				"origen_nombre"=>$origen_nombre,
				"hora"=>$datos->get_hora(),
				"tipo_movimiento"=>$datos->get_tipo_movimiento(),
				"destino_id"=>$datos->get_destino_id(),
				"destino_nombre"=>$destino_nombre,
				"estado_registro"=>$datos->get_estado_registro(),
				"estado_proceso"=>$datos->get_estado_proceso(),
				"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 movimiento_registrar(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0, "indices"=>array());
	if (isset($_POST["txt_codigo"]) && isset($_SESSION["usuario_editor"])){
		$activo = true;
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["txt_codigo"];
		if (isset($_POST["activo"])){
			$activo = $_POST["activo"];
		}
		$fecha = $_POST["txt_fecha"];
		$hora = $_POST["txt_hora"];
		$origen_id = $_POST["txt_origen_id"];
		$tipo_movimiento = $_POST["txt_tipo_movimiento"];
		$txt_igv = 18;
		$destino_id = $_POST["txt_destino_id"];
		$estado_registro = $_POST["txt_estado_registro"];
		$estado_proceso = $_POST["txt_estado_proceso"];
		$productos = json_decode($_POST["txt_lista"], true);
		$eliminados = json_decode($_POST["txt_eliminado"], true);
		if (isset($_POST["txt_igv"])){
			$txt_igv = $_POST["txt_igv"];
		}
		
		$datos = cls_Movimiento::Indice($codigo);
		$datos->set_fecha($fecha);
		$datos->set_hora($hora);
		$datos->set_origen_id($origen_id);
		$datos->set_tipo_movimiento($tipo_movimiento);
		$datos->set_destino_id($destino_id);
		$datos->set_estado_registro($estado_registro);
		$datos->set_estado_proceso($estado_proceso);
		$datos->set_activo($activo);
		if ($datos->registrar($usuario_editor)){
			for ($idx=0; $idx<count($eliminados); $idx++){
				$producto = cls_Movimiento_Producto::Indice($eliminados[$idx]);
				$producto->eliminar($usuario_editor);
			}
			$respuestas["codigo"] = $datos->get_movimiento_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($productos); $idx++){
				$producto_id = $productos[$idx]["producto_id"];
				$almacen_id = 0;
				$movimiento_producto_id = 0;
				if ($producto_id <= 0 && strlen(trim($productos[$idx]["producto_nombre"])) > 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");
					$producto_reg->registrar($usuario_editor);
					$producto_id = $producto_reg->get_producto_id();
				}
				if ($producto_id > 0){
					$prod_almacen = cls_Almacen_General::Indice($productos[$idx]["almacen_id"]);
					if ($prod_almacen->get_almacen_general_id() == 0){
						$prod_almacen->set_compra_id(0);
						$prod_almacen->set_compra_producto_id(0);
						$prod_almacen->set_producto_id($producto_id);
						$prod_almacen->set_moneda_codigo("USD");
						$prod_almacen->set_igv_porcentaje($txt_igv);
						$prod_almacen->set_valor_ganancia(0.0);
						$prod_almacen->set_precio_compra(0);
						$prod_almacen->set_precio_venta($productos[$idx]["precio_venta"]);
						$prod_almacen->set_precio_minimo(0.0);
						$prod_almacen->set_unidades(0);
						$prod_almacen->set_ubicacion("");
						$prod_almacen->set_tipo_movimiento("Movimiento Almacen");
						$prod_almacen->registrar($usuario_editor);
					}
					$almacen_id = $prod_almacen->get_almacen_general_id();
					$producto = cls_Movimiento_Producto::Indice($productos[$idx]["codigo"]);
					$producto->set_movimiento_id($datos->get_movimiento_id());
					$producto->set_almacen_id($almacen_id);
					$producto->set_producto_id($producto_id);
					$producto->set_moneda_codigo($prod_almacen->get_moneda_codigo());
					$producto->set_igv_porcentaje($txt_igv);
					$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"]);
					$correcto = $correcto && $producto->registrar($usuario_editor);
					$movimiento_producto_id = $producto->get_movimiento_producto_id();
				}
				array_push($indices, array($productos[$idx]["indice"], $movimiento_producto_id,$producto_id, $almacen_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 registrando el proceso.";
		}
	} else {
		$respuestas["mensaje"] = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function movimiento_responder_transferencia(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0);
	$usuario_editor = 0;
	$codigo = 0;
	if (isset($_SESSION["usuario_editor"]) && isset($_POST["txt_codigo"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["txt_codigo"];
		$tienda = $_POST["txt_tienda"];
		$stock_suficiente = true;
		$productos_insuficientes = array();
		$datos = cls_Movimiento::Indice($codigo);
		$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
		$productos->cargar_datos(0, 0);
		for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
			$producto_origen = cls_Almacen_Tienda::Indice($productos->get_almacen_id($idx));
			if ($producto_origen->get_unidades() < $productos->get_unidades($idx)){
				$stock_suficiente = false;
				array_push($productos_insuficientes, "No hay stock suficiente de ".$producto_origen->get_producto_nombre());
			}
		}
		if ($stock_suficiente){
			if ($datos->get_movimiento_id() > 0 && $datos->get_estado_proceso() == "Pendiente"){
				for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
					$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_origen = cls_Almacen_Tienda::Indice($productos->get_almacen_id($idx));
					$unidades = $producto_origen->get_unidades() - $productos->get_unidades($idx);
					if ($unidades < 0){
						$unidades = 0;
					}
					$producto_origen->set_unidades($unidades);
					if($producto_origen->registrar($usuario_editor)){
						$control = new cls_Control_Movimiento();
						$control->set_control_movimiento_id(0);
						$control->set_tienda_id($tienda);
						$control->set_origen_id(-1);
						$control->set_almacen_general_id($producto_origen->get_almacen_general_id());
						$control->set_almacen_tienda_id($producto_origen->get_almacen_tienda_id());
						$control->set_movimiento_id($datos->get_movimiento_id());
						$control->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Transferencia");
						$control->set_estado("Salida");
						$control->set_movimiento_fecha($datos->get_fecha());
						$control->registrar($usuario_editor);
					}
				}
				$datos->set_estado_proceso("Respondido");
				$datos->registrar($usuario_editor);
				$respuestas["estado"]  = "ok";
				$respuestas["codigo"]  = $datos->get_movimiento_id();
			} else {
				$respuestas["mensaje"]  = "No se puede realizar el movimiento de productos.";
			}
		} else {
			 $respuestas["mensaje"] = implode(", <br />", $productos_insuficientes);
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function movimiento_cancelar_transferencia(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0);
	$usuario_editor = 0;
	$codigo = 0;
	if (isset($_SESSION["usuario_editor"]) && isset($_POST["txt_codigo"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["txt_codigo"];
		$datos = cls_Movimiento::Indice($codigo);
		if ($datos->get_movimiento_id() > 0 && $datos->get_estado_proceso() == "Pendiente"){
			$datos->set_estado_proceso("Cancelado");
			$datos->set_estado_registro("Completado");
			$datos->registrar($usuario_editor);
			$respuestas["estado"]  = "ok";
			$respuestas["codigo"]  = $datos->get_movimiento_id();
		} else {
			$respuestas["mensaje"]  = "No se puede realizar el movimiento de productos.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function movimiento_recibir_distribucion(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_SESSION["usuario_editor"]) && isset($_POST["txt_codigo"])){
		$codigo = $_POST["txt_codigo"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Movimiento::Indice($codigo);
		if ($datos->get_movimiento_id() > 0){
			$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			$stock_suficiente = true;
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				$tienda = $datos->get_destino_id();
				$f_producto_id = $productos->get_producto_id($idx);
				$producto_origen = cls_Almacen_General::Indice($productos->get_almacen_id($idx));
				$producto_destino = cls_Almacen_Tienda::Producto($tienda, $f_producto_id);
				if ($producto_destino-> get_almacen_tienda_id() == 0){
					$producto_destino->set_almacen_general_id($producto_origen->get_almacen_general_id());
					$producto_destino->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
					$producto_destino->set_tienda_id($tienda);
					$producto_destino->set_producto_id($producto_origen->get_producto_id());
					$producto_destino->set_moneda_codigo($producto_origen->get_moneda_codigo());
					$producto_destino->set_igv_porcentaje($producto_origen->get_igv_porcentaje());
					$producto_destino->set_precio_compra($producto_origen->get_precio_compra());
					$producto_destino->set_precio_venta($producto_origen->get_precio_venta());
					$producto_destino->set_precio_minimo($producto_origen->get_precio_minimo());
					$producto_destino->set_unidades(0);
					$producto_destino->set_fecha_vencimiento($producto_origen->get_fecha_vencimiento());
					$producto_destino->set_tipo_movimiento("Ingreso Tienda");
				}
				$producto_destino->set_unidades($producto_destino->get_unidades() + $productos->get_unidades($idx));
				if ($producto_destino->registrar($usuario_editor)){
						$control = new cls_Control_Movimiento();
						$control->set_control_movimiento_id(0);
						$control->set_tienda_id($datos->get_destino_id());
						$control->set_origen_id(0);
						$control->set_almacen_general_id($producto_origen->get_almacen_general_id());
						$control->set_almacen_tienda_id($producto_destino->get_almacen_tienda_id());
						$control->set_movimiento_id($datos->get_movimiento_id());
						$control->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Distribución");
						$control->set_estado("Ingreso");
						$control->set_movimiento_fecha($datos->get_fecha());
						$control->registrar($usuario_editor);
				}
			}
			$datos->set_estado_proceso("Recibido");
			$datos->set_estado_registro("Completado");
			$datos->registrar($usuario_editor);
			$respuestas["codigo"]  = $datos->get_movimiento_id();
			$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 movimiento_recibir_transferencia(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_SESSION["usuario_editor"]) && isset($_POST["txt_codigo"])){
		$codigo = $_POST["txt_codigo"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Movimiento::Indice($codigo);
		if ($datos->get_movimiento_id() > 0){
			$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			$stock_suficiente = true;
			$tienda = $datos->get_destino_id();
			if (isset($_POST["txt_tienda"]) && $_POST["txt_tienda"] != $tienda ){
				$tienda = $_POST["txt_tienda"];
			}
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				$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_origen = cls_Almacen_Tienda::Indice($productos->get_almacen_id($idx));
				$producto_destino = cls_Almacen_Tienda::Producto($tienda, $f_producto_id);
				if ($producto_destino-> get_almacen_tienda_id() == 0){
					$producto_destino->set_almacen_general_id($producto_origen->get_almacen_general_id());
					$producto_destino->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
					$producto_destino->set_tienda_id($tienda);
					$producto_destino->set_producto_id($producto_origen->get_producto_id());
					$producto_destino->set_moneda_codigo($producto_origen->get_moneda_codigo());
					$producto_destino->set_igv_porcentaje($producto_origen->get_igv_porcentaje());
					$producto_destino->set_precio_compra($producto_origen->get_precio_compra());
					$producto_destino->set_precio_venta($producto_origen->get_precio_venta());
					$producto_destino->set_precio_minimo($producto_origen->get_precio_minimo());
					$producto_destino->set_unidades(0);
					$producto_destino->set_fecha_vencimiento($producto_origen->get_fecha_vencimiento());
					$producto_destino->set_tipo_movimiento("Ingreso Tienda");
				}
				$producto_destino->set_unidades($producto_destino->get_unidades() + $productos->get_unidades($idx));
				if($producto_destino->registrar($usuario_editor)){
						$control = new cls_Control_Movimiento();
						$control->set_control_movimiento_id(0);
						$control->set_tienda_id($tienda);
						if ($datos->get_origen_id() == $tienda){
							$control->set_origen_id($datos->get_destino_id());
						} else if ($datos->get_destino_id() == $tienda){
							$control->set_origen_id($datos->get_origen_id());
						} else {
							$control->set_origen_id(0);
						}
						$control->set_almacen_general_id($producto_destino->get_almacen_general_id());
						$control->set_almacen_tienda_id($producto_destino->get_almacen_tienda_id());
						$control->set_movimiento_id($datos->get_movimiento_id());
						$control->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Transferencia");
						$control->set_estado("Ingreso");
						$control->set_movimiento_fecha($datos->get_fecha());
						$control->registrar($usuario_editor);
				}
			}
			$datos->set_estado_proceso("Recibido");
			$datos->set_estado_registro("Completado");
			$datos->registrar($usuario_editor);
			$respuestas["codigo"]  = $datos->get_movimiento_id();
			$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 movimiento_preparar_transferencia(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "codigo"=>0);
	if (isset($_SESSION["usuario_editor"]) && isset($_POST["txt_codigo"])){
		$usuario_editor = $_SESSION["usuario_editor"];
		$codigo = $_POST["txt_codigo"];
		$datos = cls_Movimiento::Indice($codigo);
		$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
		$productos->cargar_datos(0, 0);
		if ($datos->get_movimiento_id() > 0 && $datos->get_estado_registro() == "Pendiente" && $datos->get_estado_proceso() == "Pendiente"){
			$datos->set_estado_registro("Completado");
			$datos->set_estado_proceso("Completado");
			if ($datos->registrar($usuario_editor)){
				$datos->set_movimiento_id(0);
				$datos->set_destino_id($datos->get_origen_id());
				$datos->set_origen_id(0);
				$datos->set_tipo_movimiento("Distribución");
				$datos->set_estado_registro("Pendiente");
				$datos->set_estado_proceso("Pendiente");
				if($datos->registrar($usuario_editor)){
					for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
						$producto = cls_Movimiento_Producto::Indice($productos->get_movimiento_producto_id($idx));
						$producto->set_movimiento_producto_id(0);
						$producto->set_movimiento_id($datos->get_movimiento_id());
						$producto->registrar($usuario_editor);
					}
					$respuestas["codigo"]  = $datos->get_movimiento_id();
					$respuestas["estado"]  = "ok";
					$respuestas["mensaje"]  = "Transferencia preparada.";
				} else {
					$respuestas["mensaje"]  = "No se pudo preparar la transferencia.";
				}
			} else {
				$respuestas["mensaje"]  = "No se puede actualizar el pedido.";
			}
		} else {
			$respuestas["mensaje"]  = "No se puede preparar el pedido.";
		}
	} else {
		$respuestas["mensaje"] = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_generar_reposicion(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["tienda"]) && isset($_POST["productos"]) && isset($_SESSION["usuario_editor"])){
		$tienda = $_POST["tienda"];
		$fecha = $_POST["fecha"];
		$hora = $_POST["hora"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = new cls_Movimiento();
		$datos->set_fecha($fecha);
		$datos->set_hora($hora);
		$datos->set_origen_id(0);
		$datos->set_tipo_movimiento("Distribución");
		$datos->set_destino_id($tienda);
		$datos->set_estado_registro("Pendiente");
		$datos->set_estado_proceso("Pendiente");
		$datos->set_activo(true);
		if ($datos->registrar($usuario_editor)){
			$productos = json_decode($_POST["productos"], true);
			for ($idx=0; $idx<count($productos); $idx++){
				$producto = $productos[$idx];
				$producto = new cls_Movimiento_Producto();
				$producto->set_movimiento_id($datos->get_movimiento_id());
				$producto->set_almacen_id($productos[$idx]["almacen_id"]);
				$producto->set_producto_id($productos[$idx]["producto_id"]);
				$producto->set_moneda_codigo("USD");
				$producto->set_igv_porcentaje(18);
				$producto->set_precio_compra(0.0);
				$producto->set_precio_venta(0.0);
				$producto->set_precio_minimo(0.0);
				$producto->set_unidades($productos[$idx]["unidades"]);
				$producto->registrar($usuario_editor);
			}
			$respuestas["estado"] = "ok";
			$respuestas["mensaje"] = "<strong style='color:green;'>La lista de reposición se ha generado ( Distribuir )</strong>";
		} else {
			$respuestas["mensaje"]  = "No se pudo registrar la lista de reposición.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function almacen_general_generar_devolucion(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["tienda"]) && isset($_POST["tienda_devolucion"]) && isset($_POST["productos"]) && isset($_SESSION["usuario_editor"])){
		$tienda = $_POST["tienda"];
		$tienda_devolucion = $_POST["tienda_devolucion"];
		$fecha = $_POST["fecha"];
		$hora = $_POST["hora"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = new cls_Movimiento();
		$datos->set_fecha($fecha);
		$datos->set_hora($hora);
		$datos->set_origen_id($tienda);
		$datos->set_tipo_movimiento("Devolución");
		$datos->set_destino_id($tienda_devolucion);
		$datos->set_estado_registro("Pendiente");
		$datos->set_estado_proceso("Pendiente");
		$datos->set_activo(true);
		if ($datos->registrar($usuario_editor)){
			$productos = json_decode($_POST["productos"], true);
			for ($idx=0; $idx<count($productos); $idx++){
				$producto_reg = cls_Almacen_Tienda::Indice($productos[$idx]["almacen_tienda_id"]);
				$producto_reg->set_unidades($producto_reg->get_unidades() - $productos[$idx]["unidades"]);
				$producto_reg->registrar($usuario_editor);
				
				$producto = new cls_Movimiento_Producto();
				$producto->set_movimiento_id($datos->get_movimiento_id());
				$producto->set_almacen_id($producto_reg->get_almacen_tienda_id());
				$producto->set_producto_id($productos[$idx]["producto_id"]);
				$producto->set_moneda_codigo("USD");
				$producto->set_igv_porcentaje(18);
				$producto->set_precio_compra(0.0);
				$producto->set_precio_venta(0.0);
				$producto->set_precio_minimo(0.0);
				$producto->set_unidades($productos[$idx]["unidades"]);
				if($producto->registrar($usuario_editor)){
					$control = new cls_Control_Movimiento();
					$control->set_control_movimiento_id(0);
					$control->set_tienda_id($tienda);
					$control->set_origen_id(-1);
					$control->set_almacen_general_id($producto_reg->get_almacen_general_id());
					$control->set_almacen_tienda_id($producto_reg->get_almacen_tienda_id());
					$control->set_movimiento_id($datos->get_movimiento_id());
					$control->set_movimiento_producto_id($producto->get_movimiento_producto_id());
					$control->set_producto_id($productos[$idx]["producto_id"]);
					$control->set_unidades($productos[$idx]["unidades"]);
					$control->set_tipo_movimiento("Devolución");
					$control->set_estado("Salida");
					$control->set_movimiento_fecha($fecha);
					$control->registrar($usuario_editor);
				}
			}
			$respuestas["estado"] = "ok";
			$respuestas["mensaje"] = "<strong style='color:green;'>La lista de productos se han transferido</strong>";
		} else {
			$respuestas["mensaje"]  = "No se pudo registrar la lista de reposición.";
		}
	} else {
		$respuestas["mensaje"]  = "Ocurrió un error recibiendo los datos.";
	}
	echo(json_encode($respuestas));
}
function movimiento_enviar_distribucion(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_SESSION["usuario_editor"])){
		$codigo = $_POST["buscar"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Movimiento::Indice($codigo);
		if ($datos->get_movimiento_id() > 0){
			$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			$stock_suficiente = true;
			$productos_insuficientes = array();
			$tienda = $datos->get_origen_id();
			if ($tienda == 0){
				$tienda = $datos->get_destino_id();
			}
			for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
				$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_origen = cls_Almacen_General::Indice($productos->get_almacen_id($idx));
				if ($producto_origen->get_unidades() < $productos->get_unidades($idx)){
					//echo($producto_origen->get_producto_nombre());
					$stock_suficiente = false;
					array_push($productos_insuficientes, "No hay stock suficiente de ".$producto_origen->get_producto_nombre());
				}
			}
			if ($stock_suficiente == true){
				for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
					/*$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_origen = cls_Almacen_General::Indice($productos->get_almacen_id($idx));
					/*$producto_destino = cls_Almacen_Tienda::ProductoPrecios($tienda, $f_producto_id, $f_precio_venta, $f_precio_minimo);
					if ($producto_destino->get_almacen_tienda_id() == 0){
						$producto_destino->set_almacen_general_id($producto_origen->get_almacen_general_id());
						$producto_destino->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$producto_destino->set_tienda_id($tienda);
						$producto_destino->set_producto_id($producto_origen->get_producto_id());
						$producto_destino->set_moneda_codigo($producto_origen->get_moneda_codigo());
						$producto_destino->set_igv_porcentaje($producto_origen->get_igv_porcentaje());
						$producto_destino->set_precio_compra($producto_origen->get_precio_compra());
						$producto_destino->set_precio_venta($producto_origen->get_precio_venta());
						$producto_destino->set_precio_minimo($producto_origen->get_precio_minimo());
						$producto_destino->set_unidades(0);
						$producto_destino->set_fecha_vencimiento($producto_origen->get_fecha_vencimiento());
						$producto_destino->set_tipo_movimiento("Ingreso Tienda");
					}*/
					$producto_origen->set_unidades($producto_origen->get_unidades() - $productos->get_unidades($idx));
					if($producto_origen->registrar($usuario_editor)){
						//$producto_destino->set_unidades($producto_destino->get_unidades() + $productos->get_unidades($idx));
						//$producto_destino->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_origen->get_almacen_general_id());
						$control->set_almacen_tienda_id(0);
						$control->set_movimiento_id($datos->get_movimiento_id());
						$control->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Distribución");
						$control->set_estado("Salida");
						$control->set_movimiento_fecha($datos->get_fecha());
						$control->registrar($usuario_editor);
					}
				}
				$datos->set_estado_registro("Pendiente");
				$datos->set_estado_proceso("Enviado");
				$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 movimiento_recibir_devolucion(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "datos"=>array());
	if (isset($_POST["buscar"]) && isset($_SESSION["usuario_editor"])){
		$codigo = $_POST["buscar"];
		$usuario_editor = $_SESSION["usuario_editor"];
		$datos = cls_Movimiento::Indice($codigo);
		if ($datos->get_movimiento_id() > 0){
			$productos = cls_Group_Movimiento_Producto::Movimiento($datos->get_movimiento_id());
			$productos->cargar_datos(0, 0);
			$lista = array();
			$stock_suficiente = true;
			$productos_insuficientes = array();
			$tienda = $datos->get_origen_id();
			if (true){
				for ($idx=0; $idx<$productos->get_cantidad_cargados(); $idx++){
					$producto_destino = cls_Almacen_General::Producto($productos->get_producto_id($idx));
					if ($producto_destino->get_almacen_general_id() == 0){
						/*$producto_destino->set_almacen_general_id($producto_origen->get_almacen_general_id());
						$producto_destino->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$producto_destino->set_tienda_id($tienda);
						$producto_destino->set_producto_id($producto_origen->get_producto_id());
						$producto_destino->set_moneda_codigo($producto_origen->get_moneda_codigo());
						$producto_destino->set_igv_porcentaje($producto_origen->get_igv_porcentaje());
						$producto_destino->set_precio_compra($producto_origen->get_precio_compra());
						$producto_destino->set_precio_venta($producto_origen->get_precio_venta());
						$producto_destino->set_precio_minimo($producto_origen->get_precio_minimo());
						$producto_destino->set_unidades(0);
						$producto_destino->set_fecha_vencimiento($producto_origen->get_fecha_vencimiento());
						$producto_destino->set_tipo_movimiento("Ingreso Tienda");*/
					}
					$producto_destino->set_unidades($producto_destino->get_unidades() + $productos->get_unidades($idx));
					if($producto_destino->registrar($usuario_editor)){
						$control = new cls_Control_Movimiento();
						$control->set_control_movimiento_id(0);
						$control->set_tienda_id(0);
						$control->set_origen_id($datos->get_origen_id());
						$control->set_almacen_general_id($producto_destino->get_almacen_general_id());
						$control->set_almacen_tienda_id($productos->get_almacen_id($idx));
						$control->set_movimiento_id($datos->get_movimiento_id());
						$control->set_movimiento_producto_id($productos->get_movimiento_producto_id($idx));
						$control->set_producto_id($productos->get_producto_id($idx));
						$control->set_unidades($productos->get_unidades($idx));
						$control->set_tipo_movimiento("Devolución");
						$control->set_estado("Ingreso");
						$control->set_movimiento_fecha($datos->get_fecha());
						$control->registrar($usuario_editor);
					}
				}
				$datos->set_estado_registro("Completado");
				$datos->set_estado_proceso("Almacenado");
				$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 movimiento_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"];
		$hora = $_POST["txt_hora"];
		$origen_id = $_POST["txt_origen_id"];
		$tipo_movimiento = $_POST["txt_tipo_movimiento"];
		$destino_id = $_POST["txt_destino_id"];
		$estado_registro = $_POST["txt_estado_registro"];
		$productos = json_decode($_POST["txt_lista"], true);
		
		$datos = cls_Movimiento::Indice($codigo);
		$datos->set_fecha($fecha);
		$datos->set_hora($hora);
		$datos->set_origen_id($origen_id);
		$datos->set_tipo_movimiento($tipo_movimiento);
		$datos->set_destino_id($destino_id);
		$datos->set_estado_registro($estado_registro);
		$datos->set_activo($activo);
		if ($datos->registrar($usuario_editor)){
			$respuestas["codigo"] = $datos->get_movimiento_id();
			$correcto = true;
			$indices = array();
			for ($idx=0; $idx<count($productos); $idx++){
				$producto = cls_Movimiento_Producto::Indice($productos[$idx]["codigo"]);
				$producto->set_movimiento_id($datos->get_movimiento_id());
				$producto->set_almacen_id($productos[$idx]["almacen_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_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"]);
				$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_Tienda::Producto($destino_id, $f_producto_id);
				$almacenado->set_almacen_general_id($producto->get_almacen_id());
				$almacenado->set_movimiento_producto_id($producto->get_movimiento_producto_id());
				$almacenado->set_tienda_id($datos->get_destino_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_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($producto->get_unidades() + $almacenado->get_unidades());
				$almacenado->set_fecha_vencimiento($producto->get_fecha_vencimiento());
				$almacenado->set_tipo_movimiento("Actualización Almacen");
				$almacenado->registrar($usuario_editor);
				
				array_push($indices, array($productos[$idx]["indice"], $producto->get_movimiento_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 movimiento_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_Movimiento::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));
}
function aviso_pedidos_almacen(){
	$respuestas = array("estado"=>"error", "mensaje"=>"", "cantidad"=>0, "permisos"=>"");
	if (isset($_POST["almacen"])){
		$items_pagina = 0;
		$items_cantidad = 0;
		$destino = $_POST["almacen"];
		$buscar = "";
		$ordendireccion = "ASC";
		$filtro_estado = "Pendiente";
		$datos = new cls_Group_Movimiento();
		$datos = cls_Group_Movimiento::RecibidosEstadoRegistro($destino, $filtro_estado, $ordendireccion);
		$datos->cargar_datos($items_pagina, $items_cantidad);
		
		if ($datos->get_cantidad() > 0){
			$respuestas["cantidad"] = $datos->get_cantidad();
			$respuestas["estado"] = "ok";
		}
		$cambiar_precio_venta = false;
		if ($_SESSION["control"]["tipo_editor"] == "administracion_general"){ 
			$cambiar_precio_venta = true;
		} else if (isset($_SESSION["usuario_editor"])){
			$usuario_editor = cls_Usuario::Indice($_SESSION["usuario_editor"]);
			$permisos = $usuario_editor->get_permisos();
			if (strlen($permisos) > 2){
				$permisos = json_decode($permisos, true);
				if (isset($permisos["cambiar_precio_venta"])){
					$cambiar_precio_venta = $permisos["cambiar_precio_venta"];
				}
			}
		}
		$respuestas["cambiar_precio_venta"] = $cambiar_precio_venta;
	}
	echo(json_encode($respuestas));
}

if (isset($_POST["accion"])){
    if ($_POST["accion"] == "lista"){
		movimiento_lista();
	} else if ($_POST["accion"] == "almacen_general"){
		movimiento_lista_almacen_general();
	} else if ($_POST["accion"] == "datos"){
		movimiento_datos();
    } else if ($_POST["accion"] == "registrar"){
		movimiento_registrar();
    } else if ($_POST["accion"] == "responder_transferencia"){
		movimiento_responder_transferencia();
	} else if ($_POST["accion"] == "cancelar_transferencia"){
		movimiento_cancelar_transferencia();
	} else if ($_POST["accion"] == "recibir_transferencia"){
		if ($_POST["txt_tienda_origen"] > 0){
			movimiento_recibir_transferencia();
		} else {
			movimiento_recibir_distribucion();
		}
	} else if ($_POST["accion"] == "preparar_transferencia"){
		movimiento_preparar_transferencia();
    } else if ($_POST["accion"] == "generar_reposicion"){
		almacen_general_generar_reposicion();
    } else if ($_POST["accion"] == "generar_devolucion"){
		almacen_general_generar_devolucion();
    } else if ($_POST["accion"] == "enviar_distribucion"){
		movimiento_enviar_distribucion();
    } else if ($_POST["accion"] == "recibir_devolucion"){
		movimiento_recibir_devolucion();
    } else if ($_POST["accion"] == "almacenar_actualizacion"){
		movimiento_almacenar_actualizacion();
    } else if ($_POST["accion"] == "eliminar"){
		movimiento_eliminar();
	} else if ($_POST["accion"] == "aviso_pedidos_almacen"){
		aviso_pedidos_almacen();
	} else if ($_POST["accion"] == "transferencias"){
		movimiento_transferencias();
	} else if ($_POST["accion"] == "pedidos_recibidos"){
		movimiento_pedidos_recibidos();
	} else if ($_POST["accion"] == "pedidos_solicitados"){
		movimiento_pedidos_solicitados();
	}
}
?>
