<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Ventas extends CI_Controller {

	public function __construct() {
		parent::__construct();
		if (!$this->Usuario->try()) {
			redirect('login');
		}
	}

	/**
	 * Muestra listado de ventas (boletas o facturas) agrupadas por mes
	 */
	public function index($mes = '', $tipo_venta = 1) {
		// Método obsoleto, solo usado para ver facturas
		// Otros casos redirige a ventas en tienda

		//Se consultan productos ordenados por proveedor, nombre
		$transportista = $_GET['transportista'] ?? 0;
		$asignado = $_GET['asignado'] ?? '-1';

		$data['ventas'] = $this->Venta->get_all($tipo_venta, $transportista, $asignado);
		$data['totales'] = $this->Venta->get_totales($tipo_venta);

		$data = $this->Venta->get_globales_min($data);

		$data['view'] = 'ventas/index';
		$data['title'] = 'Ventas';
		$data['mes_actual'] = $mes;
		$data['tipo_venta'] = $tipo_venta;

		// Mermas y Abonos
		if ($tipo_venta == 4) { 
			$data['linkActivo']['section'] = 'Ventas';
			$data['linkActivo']['activo'] = 'Mermas y Abonos';
		}
		
		// Notas de Credito Recibidas
		if ($tipo_venta == 3) { 
			$data['linkActivo']['section'] = 'Compras';
			$data['linkActivo']['activo'] = 'Notas de Crédito';
		}

		$data['content'] = $this->load->view('ventas/index', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas con boletas agrupadas por mes
	 */
	public function boletas($periodo = '') {
		$emision = $data['emision'] = $this->input->get('emision') ?? $emision ?? 0;
		$periodo = $this->input->get('periodo') ?? $periodo ?? date('Ym');
		$canal = $this->input->get('canal') ?? 0;
		$transportista = $this->input->get('transportista') ?? 0;
		$tipoDocumento = !empty($this->input->get('tipo-documento')) ? $this->input->get('tipo-documento') : [1, 5, 7, 8, 9, 11, 12];

		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_documentos($tipoDocumento, $periodo, $canal, $emision, $transportista);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Boletas';
		$data['periodo'] = $periodo;
		$data['content'] = $this->load->view('ventas/boletas', $data , true);
		$this->load->view('default', $data);
	}

	public function exportar_boletas_csv() {
			$emision = $this->input->post('emision') ?? 0;
			$periodo = $this->input->post('periodo') ?? date('Ym');
			$canal = $this->input->post('canal') ?? 0;
			$tipoDocumento = !empty($this->input->post('tipo-documento')) ? $this->input->post('tipo-documento') : [1, 5, 7, 8, 9, 11, 12];

			//Se traen ventas segun parametros
			$data['ventas'] = $this->Venta->get_documentos($tipoDocumento, $periodo, $canal, $emision);

			// Nombre dinámico del archivo
			$filename = 'reporte_documentos_' . $periodo . '.csv';

			header('Content-Type: text/csv; charset=utf-8');
			header('Content-Disposition: attachment; filename=' . $filename);

			$output = fopen('php://output', 'w');

			// Encabezados del CSV
			fputcsv($output, [
				'ID Venta', 'Fecha Venta', 'Hora Venta', 'ID Tipo Documento',
				'Número Documento', 'ID Canal', 'Total'
			]);

			foreach ($data['ventas']['ventas'] as $venta) {
				// Separar fecha y hora
				list($fecha, $hora) = explode(' ', $venta['fecha_venta']);

				// Número de documento: si hay boleta usar esa, sino vacío
				$numero_documento = !empty($venta['boleta']) ? $venta['boleta'] : '';

				// Escribir línea en el CSV
				fputcsv($output, [
					$venta['id'],
					$fecha,
					$hora,
					$venta['id_tipo_documento'],
					$numero_documento,
					$venta['id_canal'],
					$venta['total']
				]);
			}

			fclose($output);
			exit;
		}

	/**
	 * Muestra listado de ventas con facturas y NC emitidas
	 */
	public function facturas() {
		$emision = $data['emision'] = $this->input->get('emision') ?? $emision ?? '-1';
		$periodo = $this->input->get('periodo') ?? $periodo ?? date('Ym');
		$canal = $this->input->get('canal') ?? $canal ?? 0;
		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_documentos([2, 13], $periodo, $canal, $emision);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Facturas';
		$data['periodo'] = $periodo;
		$data['content'] = $this->load->view('ventas/boletas', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de mermas
	 * Como no se emiten documentos se muestra total de mermas por fecha de creación
	 */
	public function mermas(){
		$emision = $data['emision'] = $this->input->get('emision') ?? $emision ?? '-1';
		$periodo = $this->input->get('periodo') ?? $periodo ?? date('Ym');
		$canal = $this->input->get('canal') ?? $canal ?? 0;
		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_documentos([2], $periodo, $canal, $emision);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Mermas';
		$data['periodo'] = $periodo;
		$data['content'] = $this->load->view('ventas/boletas', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * redirige de tienda a cite Italia
	 */
	public function tienda() {
		redirect('/ventas/tienda_italia_1601');
	}
	
	/**
	 * Muestra listado de ventas en tienda Cite Italia
	 */
	public function tienda_cite_italia($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? 'hoy';
		//Se traen ventas del periodo para canal presencial
		$data['id_canal'] = $idCanal = 2;
		$data['dias'] = $this->Venta->get_by_channel($periodo, $idCanal);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Cite Italia';
		$data['nombre_tienda'] = 'Tienda Cite Italia';
		$data['periodo'] = $periodo;
		$data['idCanal'] = $idCanal;
		$data['content'] = $this->load->view('ventas/tienda', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en tienda Italia 1601
	 */
	public function tienda_italia_1601($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? 'hoy';
		$punto_venta = $this->input->get('punto_venta') ?? $punto_venta ?? '';
		//Se traen ventas del periodo para canal presencial
		$data['id_canal'] = $idCanal = 7;
		$data['dias'] = $this->Venta->get_by_channel($periodo, $idCanal, $punto_venta);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Italia 1601';
		$data['nombre_tienda'] = 'Tienda Italia 1601';
		$data['periodo'] = $periodo;
		$data['idCanal'] = $idCanal;
		$data['content'] = $this->load->view('ventas/tienda', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en tienda Los Dominicos
	 */
	public function tienda_los_dominicos($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? 'hoy';
		$punto_venta = $this->input->get('punto_venta') ?? $punto_venta ?? '';
		//Se traen ventas del periodo para canal presencial
		$data['id_canal'] = $idCanal = 8;
		$data['dias'] = $this->Venta->get_by_channel($periodo, $idCanal, $punto_venta);

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Los Dominicos';
		$data['nombre_tienda'] = 'Tienda Los Dominicos';
		$data['periodo'] = $periodo;
		$data['idCanal'] = $idCanal;
		$data['content'] = $this->load->view('ventas/tienda', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en tienda Drugstore
	 */
	public function tienda_drugstore($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? 'hoy';
		$punto_venta = $this->input->get('punto_venta') ?? $punto_venta ?? '';
		//Se traen ventas del periodo para canal presencial
		$data['id_canal'] = $idCanal = 12;
		$data['dias'] = $this->Venta->get_by_channel($periodo, $idCanal, $punto_venta);
		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Drugstore';
		$data['nombre_tienda'] = 'Tienda Drugstore';
		$data['periodo'] = $periodo;
		$data['idCanal'] = $idCanal;
		$data['content'] = $this->load->view('ventas/tienda', $data , true);
		$this->load->view('default', $data);
	}


	/**
	 * Muestra listado de ventas en feria
	 */
	public function feria($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? 'hoy';
		$punto_venta = $this->input->get('punto_venta') ?? $punto_venta ?? '';
		//Se traen ventas del periodo para canal presencial
		$idCanal = 4;
		$data['dias'] = $this->Venta->get_by_channel($periodo, $idCanal, $punto_venta);

		$data = $this->Venta->get_globales_min($data);
		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Feria';
		$data['nombre_tienda'] = 'Feria';
		$data['periodo'] = $periodo;
		$data['idCanal'] = $idCanal;
		$data['content'] = $this->load->view('ventas/tienda', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en proceso agrupadas por estado
	 */
	public function en_espera($tipo_venta = 1) {
		$transportista = 0;
		if(!empty($_GET['transportista'])){
			$transportista = $_GET['transportista'];
		}
		$asignado = '-1';
		if(isset($_GET['asignado'])){
			$asignado = $_GET['asignado'];
		}
		$orden = 'fecha';
		if(isset($_GET['orden'])){
			$orden = $_GET['orden'];
		}
		//Se consultan productos ordenados por proveedor, nombre
		$data['ventas'] = $this->Venta->get_processing($transportista, $asignado, $orden);
		$data = $this->Venta->get_globales_min($data);

		$data['view'] = 'ventas/processing';
		$data['title'] = 'En Espera';
		$data['tipo_venta'] = $tipo_venta;
		$data['content'] = $this->load->view('ventas/en_espera', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en estado pago aceptado o Preparación en Curso
	 */
	public function preparacion() {
		$estados = [2, 3];
		$canal = $this->input->get('canal') ?? $canal ?? 0;
		$transportista = $this->input->get('transportista') ?? $transportista ?? 0;
		$asignado = $this->input->get('asignado') ?? $asignado ?? "-1";
		$orden = $this->input->get('orden') ?? $orden ?? 'id_transportista';

		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_by_state($estados, $transportista, $asignado, $canal, $orden);

		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Preparación';
		$data['active'] = 'p';
		$data['content'] = $this->load->view('ventas/by_state', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en estado pago aceptado o Preparación en Curso
	 */
	public function retiros() {
		$estados = [18];
		$canal = !empty($_GET['canal']) ? $_GET['canal'] : 0;
		$transportista = !empty($_GET['transportista']) ? $_GET['transportista'] : 0;
		$asignado = !empty($_GET['asignado']) ? $_GET['asignado'] : '-1';
		$orden = !empty($_GET['orden']) ? $_GET['orden'] : 'id_transportista';
		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_by_state($estados, $transportista, $asignado, $canal, $orden);

		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Retiros';
		$data['active'] = 'r';
		$data['content'] = $this->load->view('ventas/by_state', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de ventas en estado pago aceptado o Preparación en Curso
	 */
	public function enviados() {
		$estados = [4];
		$canal = !empty($_GET['canal']) ? $_GET['canal'] : 0;
		$transportista = !empty($_GET['transportista']) ? $_GET['transportista'] : 0;
		$asignado = !empty($_GET['asignado']) ? $_GET['asignado'] : '-1';
		$orden = !empty($_GET['orden']) ? $_GET['orden'] : 'fecha_envio';
		//Se traen ventas por entregar
		$data['ventas'] = $this->Venta->get_by_state($estados, $transportista, $asignado, $canal, $orden);

		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Enviados';
		$data['active'] = 'e';
		$data['order'] = $orden;
		$data['content'] = $this->load->view('ventas/by_state', $data , true);
		$this->load->view('default', $data);
	}



	/**
	 * Muestra gráficos según lo solicitado
	 * Mensual: todos los meses
	 * Diario: últimos 30 o 90 días
	 * Por defecto es 30 días diario
	 */

	public function charts($cant = 90) {
		if (!$_SESSION['usuario']['admin']) {
			redirect('/ventas/boletas');
		}
		$diarios = $this->Venta->get_totales_diarios($cant);
		foreach($diarios as $key => $diario) {
			$fechas_diario[] = $diario['dia_semana'] . ' ' . $diario['dia'];
			$totales_diario[] = $diario['total'];
		}

		$mensuales = $this->Venta->get_total_meses();
		foreach($mensuales as $key => $mensual) {
			if (is_numeric($key)) {
				$mes = substr($key, 4, 2) . '/' . substr($key, 0, 4);
				$fechas_mensual[] = $mes;
				if (!empty($mensual['total'])) {
					$totales_mensual[] = $mensual['total'];
				}
			}
		}

		$canales = $this->Venta->get_canales_diarios(45);
		//$data['canales'] = [1 => 'Web', 2 => 'Presencial', 3 => 'Mercado Libre'];
		$data['canales'] = $canales['nombres'];
		$data['canales_dias'] = $canales['dias'];
		$data['canales_totales'] = $canales['totales'];
		//$data['canales_colores'] = [1 => '#28a745', 2 => '#007bff', 3 => '#FFCD01'];
		$data['canales_colores'] = $canales['colores'];





		$data['fechas_diario'] = $fechas_diario;
		$data['totales_diario'] = $totales_diario;
		$data['fechas_mensual'] = $fechas_mensual;
		$data['totales_mensual'] = $totales_mensual;
		$data['title'] = 'Gráficos';

		$data['canales_mensual'] = $this->Venta->get_canales_mensual();

		$data['content'] = $this->load->view('ventas/charts', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra las ventas de Prestashop que no han sido traspasadas al sistema
	 * y permite imprtarlas
	 */
	public function import() {
		$data['ventas'] = $this->Venta->ps_import();
		
		$data = $this->Venta->get_globales($data);
		
		$data['title'] = 'Importar Ventas';

		$data['content'] = $this->load->view('ventas/import', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra etiquetas para todas las ventas en preparación
	 */
	public function labels($id = 0) {
		// Busca Ventas en preparación
		$data['ventas'] = $this->Venta->get_delivery_info($id);
		$this->load->view('ventas/labels', $data);
	}

	/**
	 * Muestra Balnce mensual de ventas y compras
	 */
	public function balance($periodo = null) {
		if (!$_SESSION['usuario']['admin']) {
			redirect('/ventas/boletas');
		}

		$periodo = $this->input->get('periodo') ?? ($periodo ?? date('Ym'));
		$data['periodo'] = $periodo;

		// Busca documentos emitidos en el periodo
		$data['balance'] = $this->Venta->balance($periodo);
		$data['meses_ventas'] = $this->Venta->get_meses_ventas();

		$data['title'] = 'Balance';
		$data['content'] = $this->load->view('ventas/balance', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra cantidad y total diario por tipo de documento
	 */
	public function tipo_documento($periodo = null) {
		if (!$_SESSION['usuario']['admin']) {
			redirect('/ventas/boletas');
		}

		$periodo = $this->input->get('periodo') ?? ($periodo ?? date('Ym'));
		$data['periodo'] = $periodo;

		// Busca documentos emitidos en el periodo
		$data['totales'] = $this->Venta->ventas_tipo_documento($periodo);
		$data['meses_ventas'] = $this->Venta->get_meses_ventas();
		$data['tipos_documentos'] = $this->Venta->tipos_documentos();

		$data['title'] = 'Tipos Documentos';
		$data['content'] = $this->load->view('ventas/tipo_documento', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de pedidos por transportista
	 * Muestra Pago Aceptado, En Preparación y Listo para retiro
	 */
	public function carrier($id_carrier = 0) {
		$estados = !empty($_GET['estados']) ? explode(',', $_GET['estados']) : [2, 3, 18];

		$data['ventas'] = $this->Venta->get_by_carrier($id_carrier, $estados);
		$data['estados'] = $estados;
		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Transportistas';
		$data['content'] = $this->load->view('ventas/carrier', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de envios separados por transportista de los ultimos 12 meses
	 */
	public function envios($periodo = null) {
		$periodo = $this->input->get('periodo') ?? $periodo ?? date('Ym');

		$data = $this->Venta->envios($periodo);
		$data['periodo'] = $periodo;
		/*
		pr($data);
		die;*/

		$data = $this->Venta->get_globales_min($data);

		$data['meses_ventas'] = $this->Venta->get_meses_ventas(true);

		$data['title'] = 'Envíos';
		$data['content'] = $this->load->view('ventas/envios', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra listado de envios separados por transportista de los ultimos 12 meses
	 */
	public function deliveries() {
		$result = $this->Venta->get_deliveries();
		$data['envios'] = $result['envios'];
		$data['deliveries'] = $result['transportistas'];
		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Envíos';
		$data['content'] = $this->load->view('ventas/deliveries', $data , true);
		$this->load->view('default', $data);
	}

	public function checklist($id = 0) {
		// Se trae lista de productos
		if($id != 0) {
			$data['ventas'] = $this->Venta->get_asociadas($id);
		}
		else {
			$data['ventas'] = $this->Venta->get_preparation();
		}

		$this->load->view('ventas/checklist', $data);
	}

	public function detalle($id = 0) {
		$data = $this->Venta->get($id);
		$this->load->view('ventas/detalle', $data);
	}

	public function detalle80($id = 0) {
		$data = $this->Venta->get($id);
		$this->load->view('ventas/detalle80', $data);
	}

	public function ticket_cambio($id = 0) {
		$data = $this->Venta->get($id);
		$this->load->view('ventas/ticket_cambio', $data);
	}

	public function log($id = 0) {

		if($id != 0) {
			$data['venta'] = $this->Venta->get($id);
			$data['logs'] = $this->Venta->get_log($id);
		}

		$data = $this->Venta->get_globales($data);
		$this->load->view('ventas/log', $data);
	}


	/**
	 * Muestra datos de las ventas del mes, por defecto ventas minoristas
	 * $tipo = 0 => Todo
	 * $tipo = 1 => Minorista
	 * $tipo = 2 => Mayorista
	 */
	public function mensual($periodo = null, $tipo = 0)	{
		// Recibir filtros
		$data['periodo']  = $this->input->get('periodo') ?? $periodo ?? date('Ym');
		$data['tipo']     = $this->input->get('tipo') ?? $tipo;
		$data['canal'] = $this->input->get('canal'); // Nuevo filtro

		// Consulta principal con el nuevo filtro
		$data['mensual'] = $this->Venta->mensual(
			$data['periodo'],
			$data['tipo'],
			$data['canal']
		);

		// Mantener TODO lo que ya tenías
		$data = $this->Venta->get_globales_min($data);
		$data['canales_destacados'] = $this->Venta->get_canales(['destacado' => 1]);
		$data['meses_ventas'] = $this->Venta->get_meses_ventas();
		$data['canales'][0] = 'total';
		$data['canales_colores'][0] = '#000000';
		$data['canales']['meta'] = 'Meta';
		$data['canales_colores']['meta'] = '#FF0000';

		// Vista
		$data['title']   = 'Resumen Mensual';
		$data['content'] = $this->load->view('ventas/mensual', $data, true);
		$this->load->view('default', $data);
	}

	/**
	 * Muestra Ventas según vendedor entre las fechas solicitadas, por defecto ultimo mes
	 */
	public function vendedores() {
		$vendedor = $this->input->get('vendedor') ?? 1;
		$inicio = $this->input->get('inicio') ?? date('Y-m-d', strtotime('first day of this month'));
		$fin = $this->input->get('fin') ?? date("Y-m-d");

		$data['vendedor'] = $vendedor;
		$data['inicio'] = $inicio;
		$data['fin'] = $fin;

		$data = $this->Venta->vendedor($data, $vendedor, $inicio, $fin);
		$data = $this->Venta->get_globales_min($data);

		$data['title'] = 'Vendedores';
		$data['content'] = $this->load->view('ventas/vendedores', $data , true);
		$this->load->view('default', $data);
	}

	/**
	 * Carga sección de alertas en web
	 */
	public function alertas(){
		$this->load->view('alertas');
	}


	public function canal()	{
		// =========================
		// 1. Recuperar filtros GET
		// =========================

		$filtros = [];

		$filtros['periodo'] = $_GET['periodo'] ?? null;
		$filtros['id_canal'] = !empty($_GET['id_canal']) ? (int)$_GET['id_canal'] : null;
		$filtros['id_proveedor'] = !empty($_GET['id_proveedor']) ? (int)$_GET['id_proveedor'] : null;

		$filtros['fecha_desde'] = !empty($_GET['fecha_desde']) ? $_GET['fecha_desde'] : null;
		$filtros['fecha_hasta'] = !empty($_GET['fecha_hasta']) ? $_GET['fecha_hasta'] : null;

		// =========================
		// 2. Defaults si no vienen fechas
		// (ej: este mes)
		// =========================

		if (empty($filtros['fecha_desde']) || empty($filtros['fecha_hasta'])) {
			$filtros['fecha_desde'] = date('Y-m-01');
			$filtros['fecha_hasta'] = date('Y-m-t');
		}

		// =========================
		// 3. Datos para la vista
		// =========================

		// Meses con ventas según filtros (para el select)
		$data['meses_ventas'] = $this->Venta->get_meses_ventas();

		// Canales / tiendas
		$data['canales'] = $this->Venta->get_canales();
		$data['canales_colores'] = $this->Venta->get_canales_colores();

		// Proveedores
		$this->load->model('proveedor_model', 'Proveedor');
		$data['distribuidores'] = $this->Proveedor->lista(1);

		// =========================
		// 4. Llamada al modelo
		// =========================
		$totales = $this->Venta->total_categorias($filtros);
		$data['total_categorias'] = $totales['categorias'];
		$data['total_tienda'] = $totales['total_tienda'];

		$tiendasFisicas = [2, 7, 8, 12];

		if (in_array($filtros['id_canal'], $tiendasFisicas)) {
			$totales = $this->Venta->total_ubicaciones($filtros);
			$data['total_ubicaciones'] = $totales['ubicaciones'];
		}

		// =========================
		// 5. Render
		// =========================

		$data['title'] = 'Canal';
		$data['content'] = $this->load->view('ventas/canal', $data, true);
		$this->load->view('default', $data);
	}

	/******************************************** Funciones sin vista *************************************************************/

	/*
	 * Entrega información de la venta por id
	 */
	public function get() {
		//Se revisa si se está creando una venta
		if (!empty($this->input->post('id'))) {
			$result = $this->Venta->get($this->input->post('id'));
		}
		else if(!empty($this->input->get('id'))) {
			$result = $this->Venta->get($this->input->get('id'));
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	/**
	 * Crea o edita una nueva venta
	 */
	public function save() {
		if (!empty($_POST)) {
			$result = $this->Venta->save($_POST);
			header('Content-type: application/json');
			echo json_encode($result);
		}
	}

	/**
	 * Elimina una venta de la lista, llevandolo a deleted 1
	 * se eliminan todos los productos_ventas asociados
	 */
	public function delete() {
		if ($this->input->post('id')) {
			$result = $this->Venta->delete($this->input->post('id'));
			$return['status'] = 'success';
			$return['message'] = 'Venta Eliminada';
			header('Content-type: application/json');
			echo json_encode($result);
		}
		return false;
	}

	/*************************************** JSON **********************************************/

	/*
	 * Entrega información de la venta de prestashop por id
	 */
	public function ps_get($id = 0) {
		//Se revisa si se está creando una venta
		if (!empty($this->input->post('id'))) {
			$result = $this->Venta->ps_get($this->input->post('id'));
		}
		else if(!empty($this->input->get('id'))) {
			$result = $this->Venta->ps_get($this->input->get('id'));
		}
		else if(!empty($id)){
			$result = $this->Venta->ps_get($id);
		}
		else {
			$result['error'] = TRUE;
		}
		echo json_encode($result);
	}

	/**
	 * Permite actualizar los detalles de las ventas
	 */
	public function update_detalle() {
		$this->Venta->update_detalle();
	}

	/**
	 * Muestra datos que se enviarán por email
	 * si se confirma se envía el email
	 */
	public function boleta() {
		if (!empty($this->input->post('id'))) {
			$result = $this->Venta->get($this->input->post('id'));
		}
		echo json_encode($result);
	}

	/**
	 * Envía link de boleta al cliente
	 * y actualiza registro a boleta_lista = 1
	 */
	public function enviar_boleta() {
		$id_venta = $this->input->post('id');
		if (!empty($id_venta)) {
			$data['v'] = $this->Venta->get($id_venta);

			$to = $data['v']['email'];
			$subject = 'Ya puedes descargar tu boleta';

			if ($data['v']['id_canal'] == 1) {
				$message = $this->load->view('ventas/email_boleta', $data , true);
			}
			else {
				$message = $this->load->view('ventas/email_boleta_presencial', $data , true);
			}

			$this->load->model('Email_model', 'Email');
			$result = $this->Email->send_email($to, $subject, $message);

			if ($result == 1) {
				//Marcar venta como boleta_lista = 1
				$values['boleta_lista'] = 1;
				$result = $this->Venta->update($id_venta, $values);

				if ($result) {
					$return['status'] = 'success';
					$return['id_venta'] = $id_venta;
				}
				else {
					$return['status'] = 'error';
					$return['message'] = 'Error al modificar la venta';
					return $return;
				}
			}
			else {
				$return['status'] = 'error';
				$return['message'] = 'Error al enviar el Email';
				return $return;
			}
		}
		echo json_encode($return);
	}


	/**
	 * Muestra datos para encuesta
	 * si se confirma se envía el email
	 */
	public function encuesta() {
		if (!empty($this->input->post('id'))) {
			$result = $this->Venta->get_last_survey($this->input->post('id'));
		}
		echo json_encode($result);
	}

	/**
	 * Envía link de encuesta al cliente
	 * y actualiza fecha de encuesta en venta
	 */
	public function enviar_encuesta() {
		$id_venta = $this->input->post('id');
		if (!empty($id_venta)) {

			$data['v'] = $this->Venta->get($id_venta);

			$to = $data['v']['email'];
			$subject = 'Ayúdanos a seguir mejorando, compártenos tu experiencia en DeMente Games';
			$message = $this->load->view('ventas/email_encuesta', $data , true);

			$this->load->model('Email_model', 'Email');
			$result = $this->Email->send_email($to, $subject, $message);

			if ($result == 1) {
				//Marcar venta como boleta_lista = 1
				$values['fecha_encuesta'] = date('Y-m-d H:i:s');
				$result = $this->Venta->update($id_venta, $values);

				if ($result) {
					$return['status'] = 'success';
					$return['id_venta'] = $id_venta;
				}
				else {
					$return['status'] = 'error';
					$return['message'] = 'Error al modificar la venta';
					return $return;
				}
			}
			else {
				$return['status'] = 'error';
				$return['message'] = 'Error al enviar el Email';
				return $return;
			}
		}
		echo json_encode($return);
	}


	/**
	 * Entrega datos del día para ventas en tienda
	 */
	public function resumen_dia($dia, $idCanal = 2) {
		$result = [
			'status' => 'error',
			'message' => 'No se recibieron parametros'
		];
		if (!empty($dia)) {
			$result = $this->Venta->resumen_dia($dia, $idCanal);
		}

		header('Content-type: application/json');
		echo json_encode($result);
	}


	/**
	 *
	 */
	public function cambia_estado() {
		$return['data'] = $this->Venta->change_parent_state($this->input->post('id'), $this->input->post('id_estado'));
		$return['status'] = 'success';
		echo json_encode($return);
	}

	/**
	 * Cambia estado de ventas
	 * Recibe por post un arreglo de ids de ventas y el nuevo estado
	 */
	/*
	function change_state() {
		foreach ($ids as $id) {
			//cambia estado
			$this->Venta->change_state($id, $id_estado);
		}
	}
	*/


	public function phpini(){
		echo phpinfo();
		die;
	}



	public function load_loyalty($cantidad = 50, $save = 0) {
		$this->Venta->load_loyalty($cantidad, $save);
		die;
	}

	/* Se comentan porque no se usarán más pero sirve el codigo
	public function corrige_direcciones($limit = 50, $confirmacion = 0) {
		$result = $this->Venta->corrige_direcciones($limit, $confirmacion);
		die;
	}

	public function corrige_direcciones_ps($limit = 50, $confirmacion = 0) {
		//$limit = 500;
		$result = $this->Venta->corrige_direcciones_ps($limit, $confirmacion);
		die;
	}
	*/
}
