<?php
class Facturacion extends Controller
{
    protected $_fechaActual;
	protected $_iduser;
	protected $_csstyle;
    protected $_tables;

	function __construct()
	{
		parent::controller();

		if( ! $this->redux_auth->logged_in() )
		{//verificar si el el usuario ha iniciado sesion
 			redirect(base_url().'login');
 		}
		
		$this->load->library('MY_Letras');
                
        $datestring   = "%Y-%m-%d %H:%i:%s";
	    $this->_fechaActual = mdate($datestring,now());
		
	    $this->_iduser = $this->session->userdata('id');
        $this->config->load('datatables', TRUE);
  	    $this->_tables = $this->config->item('datatables');

	    $this->config->load('style', TRUE);
	    $this->_csstyle = $this->config->item('style');

		$this->config->load('js',TRUE);
		$this->_jss=$this->config->item('js');
		
		$this->load->model("modelousuario","modelousuario");
		$this->load->model("modelo_configuracion","configuracion");
		$this->load->model('facturacion_modelo','facturacion');
        $this->load->model("modeloclientes","clientes");
	   // $this->load->model('productos_model','modelproductos');
            //$this->load->model('modelcatalogos','modelcliente');
            //$this->load->model('proveedores_model','modeloproveedores');

         $this->load->model('facturav_model','modelofacturas');
            
	}//construct
	
	public function facturasCliente($idCliente,$Limite=0)
	{
		$Data['title']= "Panel de Administración";
		$Data['cassadmin']=$this->_csstyle["cassadmin"];
		$Data['csmenu']=$this->_csstyle["csmenu"];
		$Data['csvalidate']=$this->_csstyle["csvalidate"];
		$Data['csui']=$this->_csstyle["csui"];
		$Data['nameusuario']=$this->modelousuario->getUsuarios($this->_iduser);
		$Data['Fecha_actual']=$this->_fechaActual;
		$Data['Jquical']=$this->_jss['jquerycal'];
		$Data['Jry']=$this->_jss['jquery'];
		$Data['Jqui']=$this->_jss['jqueryui'];
		$Data['jvalidate']=$this->_jss['jvalidate'];
		$Data['jFicha_cliente']=$this->_jss['jFicha_cliente'];
		$Data['JFunMensajeria']=$this->_jss['JFunMensajeria'];
		$Data['permisos']=$this->configuracion->obtenerPermisosRol($this->session->userdata('rol'));
		$Data['menuActivo']='clientes'; 
		
		$this->load->view("cabezera",$Data);
		$this->load->view('header',$Data);
		$this->load->view("principal",$Data);

		$Pag["base_url"]= base_url()."facturacion/facturasCliente/".$idCliente.'/';
		$Pag["total_rows"]=$this->facturacion->numeroFacturasCliente($idCliente);//Total de Registros
		$Pag["per_page"]=15;
		$Pag["num_links"]=5;
		$Pag["uri_segment"]=4;
		
		$this->pagination->initialize($Pag);
		
		#----------------------------------PERMISOS------------------------------------#

		$data['permiso']=$this->configuracion->obtenerPermisosId('1',$this->session->userdata('rol'));
		
		if($data['permiso']->leer=='0' and $data['permiso']->escribir=='0')
		{
			$this->load->view('accesos/index');
			$this->load->view("pie",$Data);
			
			return;
		}
		#------------------------------------------------------------------------------#
		$data['cliente']=$this->clientes->obtenerCliente($idCliente);
		$data['facturas'] = $this->facturacion->obtenerFacturasCliente($Pag["per_page"],$Limite,$idCliente);

		$this->load->view('facturacion/facturasClientes',$data);
		$this->load->view("pie",$Data);
	}
	
	function descargarXML($idFactura) #Descargar el archivo XML
	{
		$this->load->helper('download');
		
		#$serie=$this->session->userdata('serie');
		$factura=$this->facturacion->obtenerFactura($idFactura);
		$folio=$factura->folio;

		$fichero = 'cfdi'.$folio.'Timbre.xml';
		$descarga = $factura->serie.$folio.'.xml';
		$data = file_get_contents("media/fel/".$factura->idLicencia."_facturacion/cfdi/folio".$folio."/$fichero"); 
		
		force_download($descarga, $data); 
	}
	
	public function cancelarFactura() #Cancerlar el CFDI
	{
		if(!empty($_POST))
		{
			$cancelar=$this->modelofacturas->cancelarFactura();
			print($cancelar);
		}
	}
	
	public function facturaGlobal()
	{
		if(!empty($_POST))
		{
			$configuracion=$this->configuracion->obtenerConfiguracion();
			
			$global=$this->modelofacturas->generarFactura($configuracion);
			
			if($global=="1")
			{
				$this->session->set_userdata('notificacion','La factura se ha creado correctamente');
			}
			
			print($global);
		}
	}
	
	//Quitar el limite para la ejecución del script de facturacion con el PAC
	//Esto incluye la conversión de archivos 
	public function crearCFDI()
	{
		if(!empty($_POST))
		{
			set_time_limit(0); 
			
			$factura=$this->facturacion->crearCFDI();
			
			if($factura=="1")
			{
				$this->session->set_userdata('notificacion','La factura se ha creado correctamente');
			}
			
			print($factura);
		}
	}
	
	public function devolverProductosVenta()
	{
		if(!empty($_POST))
		{
			$devolver=$this->facturacion->devolverProductosVenta();
			print($devolver);
		}
	}
	
	public function reposicionesVenta()
	{
		if(!empty($_POST))
		{
			$reposicion=$this->facturacion->reposicionesVenta();
			print($reposicion);
		}
	}
	
	public function obtenerDevolucionesVenta()
	{
		if(!empty($_POST))
		{
			$idCotizacion=$this->input->post('idCotizacion');
			$cotizacion=$this->facturacion->obtenerCotizacion($idCotizacion);
			$productos=$this->facturacion->obtenerProductosCotizacion($idCotizacion);
			$nota=0;
			
			echo'
			<i>Nota: Realizar todas las devoluciones antes de realizar la Nota de Crédito</i>
			<table class="admintable" width="99%" style="border-collapse: collapse">
				<tr>
					<th colspan="7">Devoluciones de la orden de venta '.$cotizacion->ordenCompra.'</th>
				</tr>
				<tr>
					<th>#</th>
					<th>Producto</th>
					<th>Cantidad</th>
					<th>Precio</th>
					<th>Importe</th>
					<th>Devolución</th>
					<th>Acciones</th>
				<tr>';
			
			$i=1;
			
			echo'<input type="hidden" id="txtIdCotizacion" value="'.$idCotizacion.'" />'; #Campos ocultos
			
			foreach($productos as $row)
			{
				$estilo='class="sombreado"';
	
				if($i%2>0)
				{
					$estilo="class='sinSombra'";
				}
	
				echo'
				<tr '.$estilo.'>
					<td>'.$i.'</td>
					<td style="border-radius: 0px">'.$row->nombre.'</td>
					<td align="center">'.number_format($row->cantidad,2).'</td>
					<td align="right">$ '.number_format($row->precio,4).'</td>
					<td align="right">$ '.number_format($row->importe,4).'</td>
					<td align="center">';
					
					if($row->devueltos==0)
					{
						echo'
						<input type="text" id="txtCantidadDevolver'.$i.'" class="cajas" />
						<input type="hidden" id="txtCantidadTotal'.$i.'" value="'.$row->cantidad.'" />';
					}
					else
					{
						echo number_format($row->devueltos,2);
					}
						
					echo'</td>
					<td align="center">';
					
					if($row->entregado==0)
					{
						echo'Pendiente de entrega';
					}
					else
					{
						if($row->devueltos==0)
						{
							echo'<input type="checkbox" id="chkDevoluciones'.$i.'" title="Devolver" 
								onchange="devolverProductoVenta('.$i.','.$row->idProducto.')" /><br />
								<a>Devolver</a>'; 
						}
						else
						{
							$nota=1;
							
							if($row->repuesto==0)
							{
								echo'<img title="Reposicion" onclick="reposicionesVenta('.$row->idProducto.')" 
									src="'.base_url().'img/reposicion.png" id="reposiciones'.$i.'" width="22" />
								<br />
								<a>Reponer</a>';
							}
							else
							{
								echo'<img title="Se ha repuesto el producto" src="'.base_url().'img/success.png" width="22" />
								<br />
								<a>Repuesto</a>';
							}
						}
					}
					
					echo'
					</td>
				</tr>';
				
				$i++;
			}
			
			if($cotizacion->idFactura!=0 and $nota==1 and $cotizacion->idNota==0)
			{
				echo'
				<tr>
					<td colspan="7" align="right">
						<img src="'.base_url().'img/similares.png" width="22" style="margin-right:33px" 
							title="Crear Nota de Crédito" id="notaCredito" onclick="obtenerDetallesNota('.$idCotizacion.')" />
						<br />
						<a>Nota de Crédito</a>
					</td>
				</tr>';
			}
				
			echo'</table>
			
			<script>
			$("#notaCredito").click(function(e)
			{
				$("#ventanaNotaCredito").dialog("open");
			});
			</script>';
		}
	}
	
	public function obtenerDetallesNota()
	{
		if(!empty($_POST))
		{
			$idCotizacion=$this->input->post('idCotizacion');
			$cotizacion=$this->facturacion->obtenerCotizacion($idCotizacion);
			$productos=$this->facturacion->obtenerProductosNota($idCotizacion);
			
			echo'
			<table class="admintable" width="99%" style="border-collapse: collapse">
				<tr>
					<th colspan="7">Detalles de la orden de venta '.$cotizacion->ordenCompra.' para crear la Nota de Crédito</th>
				</tr>
				<tr>
					<th>#</th>
					<th>Producto</th>
					<th>Cantidad</th>
					<th>Precio</th>
					<th>Importe</th>
				<tr>';
			
			$i=1;
			$subTotal=0;
			$total=0;
			$iva=$cotizacion->iva;
			$descuento=$cotizacion->descuento/100;
			
			foreach($productos as $row)
			{
				$subTotal+=$row->devueltos*$row->precio;
				echo'
				<tr>
					<td>'.$i.'</td>
					<td style="border-radius: 0px">'.$row->nombre.'</td>
					<td align="center">'.number_format($row->devueltos,2).'</td>
					<td align="right">$ '.number_format($row->precio,4).'</td>
					<td align="right">$ '.number_format($row->devueltos*$row->precio,4).'</td>
				</tr>';
				
				$i++;
			}
			
			$descuento=$subTotal*$descuento;
			$suma=$subTotal-$descuento;
			$iva=$suma*$iva;
			$total=$suma+$iva;
			
			echo'
			<tr>
				<td class="totales" colspan="4" align="right">SUBTOTAL</td>
				<td align="right">$'.number_format($subTotal,4).'</td>
			</tr>
			<tr>
				<td class="totales" colspan="4" align="right">DESCUENTO '.number_format($cotizacion->descuento/100,2).'%</td>
				<td align="right">$'.number_format($descuento,4).'</td>
			</tr>
			<tr>
				<td class="totales" colspan="4" align="right">IVA '.number_format($cotizacion->iva,2).'%</td>
				<td align="right">$'.number_format($iva,4).'</td>
			</tr>
			<tr>
				<td class="totales" colspan="4" align="right">TOTAL</td>
				<td align="right">'.number_format($total,4).'</td>
			</tr>';
			
			echo '</table>';
			
			echo '
			<table class="admintable" width="99%" style="margin-top:4px">
				 <tr>
				<td class="key">Metodo de pago</td>
				<td>
					<input type="text" style="width:250px" class="cajas" id="txtMetodoPago1" name="txtMetodoPago1" value="Efectivo" />
				</td>
			</tr>
			<tr>
				<td class="key">Forma de pago</td>
				<td>
					<input type="text" style="width:250px" class="cajas" id="txtFormaPago1" name="txtFormaPago1" value="Pago en una sola exhibición" />
				</td>
			</tr>
			 <tr>
				<td class="key">Condiciones de pago</td>
				<td>
					<input type="text" style="width:250px" class="cajas" id="txtCondiciones1" name="txtCondiciones1" value="30 días a partir de la fecha de entrega" />
				</td>
			</tr>
		</table>';
		}
	}
	
	#------------------------------------------------------------------------------------------------------------------#
	#------------------------------------------------CANCELAR      FACTURA---------------------------------------------#
	#------------------------------------------------------------------------------------------------------------------#
	
	public function motivosCancelacionFactura()
	{
		if(!empty($_POST))
		{
			$idFactura=$this->input->post('idFactura');
			$factura=$this->facturacion->obtenerFacturaCancelar($idFactura);
			
			echo'
			<table class="admintable" width="99%">
				<tr>
					<th colspan="2">Detalle de cancelación del CFDI</th>
				</tr>
				<tr>
					<td class="key">Folio</td>
					<td>'.$factura->folio.'</td>
				</tr>
					<tr>
					<td class="key">Total</td>
					<td>$ '.number_format($factura->total,2).'</td>
				</tr>
				<tr>
					<td class="key">Motivos de cancelación</td>
					<td>
						<textarea style="width:200px" id="motivosCancelacion" name="motivosCancelacion" class="TextArea"></textarea>
						<input type="hidden" id="txtIdFactura" value="'.$idFactura.'" />
					</td>
				</tr>
			</table>';
		}
	}
	
	public function cancelarCFDI()
	{
		if(!empty($_POST))
		{
			$factura=$this->facturacion->cancelarCFDI();
			
			if($factura=="1")
			{
				$this->session->set_userdata('notificacion','La factura se ha cancelado correctamente');	
			}
			
			print($factura);
		}
	}
}

?>
