<?php
class Auxiliar extends CI_Controller{
	function __construct(){
		parent::__construct();
	}
	function reporte_inventario(){
		ini_set('max_execution_time', 300);
		/*Obtener productos*/
		$productos=$this->Generic_model->get("productos","*","","","",array("presentaciones"=>"presentaciones.id_producto=productos.id_producto AND presentaciones.tipo_presentacion=0"));
		echo "<table border='1' cellspacing='0'>";
		echo "<tr>";
		echo "<th></th>";
		echo "<th>ID</th>";
		echo "<th>SKU</th>";
		echo "<th>Producto</th>";
	/* 	echo "<th>Kardex<br> 31 dic.</th>";
		echo "<th>Ajuste <br> Aplicacion</th>";
		echo "<th>Ajuste <br> Informal</th>"; */
		echo "<th>Existencias</th>";
		echo "<th>Costo<br> promedio</th>";
		echo "<th>Costo Total</th>";
		/*echo "<th>Precio</th>";*/
		echo "</tr>";
		$iteration=0;
		foreach($productos as $producto){
			$sqlStmt="(SELECT  'entrada' as trans, id_entrada as id,fecha_entrada as fecha,concepto_entrada as concepto,(cant_entrada*unidades_representativas) as entrada, '0' as salida,(costo_entrada/unidades_representativas) as costo, ventas.documento_venta as documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv, 0 as venta FROM entrada_productos LEFT JOIN devoluciones ON entrada_productos.id_devolucion=devoluciones.id_devolucion LEFT JOIN ventas ON devoluciones.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=entrada_productos.id_presentacion WHERE entrada_productos.id_producto = '". $producto->id_producto. "')";
			$sqlStmt.=" UNION ALL "; 
			$sqlStmt.="(SELECT  'salida' as trans,id_salida as id,fecha_salida as fecha,concepto_salida as concepto,'0' as entrada,(cant_salida*unidades_representativas) as salida,0 as costo, ventas.documento_venta as  documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv, salida_productos.id_venta as venta FROM salida_productos LEFT JOIN ventas ON salida_productos.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=salida_productos.id_presentacion WHERE salida_productos.id_producto = '". $producto->id_producto. "')";
			$sqlStmt.=" ORDER BY fecha"; 
			$trans= $this->Generic_model->sql_custom($sqlStmt);
			if(count($trans)){
				$total31Entrada=0;
				$total31Salida=0;
				$totalAjusteEntrada=0;
				$totalAjusteSalida=0;
				$totalAjusteInformalEntrada=0;
				$totalAjusteInformalSalida=0;
				
				$inventarioInicial=0;
				$costoPromedio=0;
				$costoPromedio2=0;
				
				$precios=$this->Generic_model->get("preciosxpresentacion","*",array("id_presentacion"=>$producto->id_presentacion));
			
				foreach($trans as $tran){
					if(strtotime($tran->fecha)<strtotime('2021-12-31 23:59:59')){/*Saldo al 31 dic.*/
						$total31Entrada+=$tran->entrada;
						$total31Salida+=$tran->salida;
						/*Calculo del coste*/
						if($tran->trans=='entrada'){
							if($tran->concepto==0){ /*inventario inicial*/
								if($inventarioInicial==0){
									$inventarioInicial=1;
									$costoPromedio=$tran->costo;
								}
							}
							if($tran->concepto==1){ /*Compras*/
								if((($total31Entrada-$total31Salida)-$tran->entrada) >0){
									$costoPromedio=(((($total31Entrada-$total31Salida)-$tran->entrada)*$costoPromedio)+($tran->entrada*$tran->costo))/($total31Entrada-$total31Salida);
									if($costoPromedio<0)
										$costoPromedio=$tran->costo;
								}
								else{
									$costoPromedio=$tran->costo;
								}
							}
						}
						
					}else{
						/* if($tran->concepto==9){/*Transacciones de ajuste por aplicación de conteo*//*
							$totalAjusteEntrada+=$tran->entrada;
							$totalAjusteSalida+=$tran->salida;
						}
						if($tran->trans=='entrada'){
							if($tran->concepto==0) /*Transacciones de ajuste informal (Inventario inicial)*//*
								$totalAjusteInformalEntrada+=$tran->entrada;
							if($tran->concepto==1) /*Compras*//*
								$costoPromedio2=$tran->costo;
								
						}else{
							if($tran->concepto==0){/*Transacciones de ajuste informal (Ventas )*//*
								switch((int)$tran->venta){
									case 40463:
										$totalAjusteInformalSalida+=$tran->salida;
									break;
									case 40360:
										$totalAjusteInformalSalida+=$tran->salida;
									break;
									case 40023:
										$totalAjusteInformalSalida+=$tran->salida;
									break;
								}
							}
						} */
					}
					
				}
				/*Totales por producto*/
				$total31=$total31Entrada-$total31Salida;
				$totalAjuste=$totalAjusteEntrada-$totalAjusteSalida;
				$totalAjusteInformal=$totalAjusteInformalEntrada-$totalAjusteInformalSalida;
				$totalAjustado=(($total31Entrada+$totalAjusteEntrada+$totalAjusteInformalEntrada)-($total31Salida+$totalAjusteSalida+$totalAjusteInformalSalida));
				
				if($costoPromedio==0 && $costoPromedio2>0){
					$costoPromedio=$costoPromedio2;
				}
				
				if($totalAjustado>0){
					$iteration+=1;
					echo "<tr>";
					echo "<td>".$iteration."</td>";
					echo "<td>".$producto->id_producto."</td>";
					echo "<td>".$producto->sku_presentacion."</td>";
					echo "<td>".$producto->desc_presentacion."</td>";
					/* echo "<td>".$total31."</td>";
					echo "<td>".$totalAjuste."</td>";
					echo "<td>".$totalAjusteInformal."</td>"; */
					echo "<td>".$totalAjustado."</td>";
					echo "<td>".number_format($costoPromedio,4)."</td>";
					echo "<td>".number_format(($totalAjustado*$costoPromedio),4)."</td>";
					/*echo "<td>".($costoPromedio>$precios[0]->precio_presentacion?number_format(($precios[0]->precio_presentacion),4):"")."</td>";*/
					echo "</tr>";
				} 
			}
		}
	}

	function kardex_inventario(){
		$producto=$this->input->get("id");
		$inicio=null;
		$final=null;
		if($this->input->get("inicio") && $this->input->get("inicio")!=""){
			$inicio = date("Y-m-d H:i:s", strtotime($this->input->get("inicio")));
		}
		if($this->input->get("fin") && $this->input->get("fin")!=""){
			$finaldate=$this->input->get("fin")." 23:59:59";
			$final = date("Y-m-d H:i:s", strtotime($finaldate));
		}
			
			if($final)
				$sqlStmt="(SELECT  'entrada' as trans, id_entrada as id,fecha_entrada as fecha,concepto_entrada as concepto,(cant_entrada*unidades_representativas) as entrada, '0' as salida,(costo_entrada/unidades_representativas) as costo,ventas.documento_venta as documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv FROM entrada_productos LEFT JOIN devoluciones ON entrada_productos.id_devolucion=devoluciones.id_devolucion LEFT JOIN ventas ON devoluciones.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=entrada_productos.id_presentacion WHERE entrada_productos.id_producto = '". $producto. "' AND fecha_entrada < '".$final."')";
			else
				$sqlStmt="(SELECT  'entrada' as trans, id_entrada as id,fecha_entrada as fecha,concepto_entrada as concepto,(cant_entrada*unidades_representativas) as entrada, '0' as salida,(costo_entrada/unidades_representativas) as costo,ventas.documento_venta as documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv FROM entrada_productos LEFT JOIN devoluciones ON entrada_productos.id_devolucion=devoluciones.id_devolucion LEFT JOIN ventas ON devoluciones.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=entrada_productos.id_presentacion WHERE entrada_productos.id_producto = '". $producto. "')";
			$sqlStmt.=" UNION ALL "; 
			if($final)
				$sqlStmt.="(SELECT  'salida' as trans,id_salida as id,fecha_salida as fecha,concepto_salida as concepto,'0' as entrada,(cant_salida*unidades_representativas) as salida,0 as costo,ventas.documento_venta as  documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv  FROM salida_productos LEFT JOIN ventas ON salida_productos.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=salida_productos.id_presentacion WHERE salida_productos.id_producto = '". $producto. "' AND fecha_salida < '".$final."')";
	 		else
				$sqlStmt.="(SELECT  'salida' as trans,id_salida as id,fecha_salida as fecha,concepto_salida as concepto,'0' as entrada,(cant_salida*unidades_representativas) as salida,0 as costo, ventas.documento_venta as  documentov, resoluciones_caja.serie_autorizada as seriev, ventas.num_documento_venta as numdocv FROM salida_productos LEFT JOIN ventas ON salida_productos.id_venta=ventas.id_venta LEFT JOIN resoluciones_caja ON ventas.id_resolucion=resoluciones_caja.id_resolucion LEFT JOIN presentaciones ON presentaciones.id_presentacion=salida_productos.id_presentacion WHERE salida_productos.id_producto = '". $producto. "')";
			$sqlStmt.=" ORDER BY fecha"; 
			$trans= $this->Generic_model->sql_custom($sqlStmt);
			
			$inventarioInicial=0;
			$costoPromedio=0;
			
			if(count($trans)){
				$saldoInicial=0;
				$saldo=0;
				$inicialbroker=false;
				echo "<table border='1' cellspacing='0'>";
				echo "<thead><tr><th rowspan='2'>ID transacci&oacute;n</th><th rowspan='2'>fecha</th><th rowspan='2'>Concepto</th><th rowspan='2'>Proveedor</th><th rowspan='2'>Nacionalidad</th><th rowspan='2'>Referencia</th><th colspan='3'>Entradas</th><th colspan='3'>Salidas</th><th colspan='3'>Existencias</th></tr> <tr><th>Unidad</th><th>Costo Unit.</th><th>Costo Total</th><th>Unidad</th><th>Costo Unit.</th><th>Costo Total</th><th>Unidad</th><th>Costo Unit.</th><th>Costo Total</th></tr></thead>";
				echo "<tbody>";
				foreach($trans as $tran){
					if($inicio && $tran->fecha < $inicio){
						$inicialbroker=true;
						$saldoInicial=$saldoInicial+$tran->entrada-$tran->salida;
					}else{
						if($inicialbroker){
							echo "<tr>";
							echo "<td> -</td>";
							echo "<td>".$inicio."</td>";
							echo "<td>Existencias a la fecha</td>";
							echo "<td>".$saldoInicial."</td>";
							echo "<td>-</td>";
							echo "<td>".$saldoInicial."</td>";
							echo "</tr>";
							$saldo+=$saldoInicial;
							$inicialbroker=false;
						}
						$saldo=$saldo+$tran->entrada-$tran->salida;
						
						if($tran->trans=="entrada"){
							switch($tran->concepto){
								case 0:
									$tran->concepto="Inventario inicial";
									if($inventarioInicial==0){
										$inventarioInicial=1;
										$costoPromedio=$tran->costo;
									}
								break;
								case 1:
									$tran->concepto="Compra";
									if($saldo-$tran->entrada>0){
										$costoPromedio=((($saldo-$tran->entrada)*$costoPromedio)+($tran->entrada*$tran->costo))/$saldo;
										if($costoPromedio<0)
											$costoPromedio=$tran->costo;
									}else{
										$costoPromedio=$tran->costo;
									}
										
								break;
								case 2:
									$docV="Desconocido";
									switch($tran->documentov){
										case 0:$docV="Ninguno";break; 
										case 1:$docV="Factura";break; 
										case 2:$docV="CCF";break; 
										case 3:$docV="Ticket";break; 
										case 4:$docV="Nota de remisión";break; 
										case 5:$docV="Nota de envío";break; 
									}
									$tran->concepto="Devoluci&oacute;n ".$docV." ".$tran->seriev." ".$tran->numdocv;
								break;
							}
						}
						if($tran->trans=="salida"){
							switch($tran->concepto){
								case 0:
									$docV="Desconocido";
									switch($tran->documentov){
										case 0:$docV="Ninguno";break; 
										case 1:$docV="Factura";break; 
										case 2:$docV="CCF";break; 
										case 3:$docV="Ticket";break; 
										case 4:$docV="Nota de remisión";break; 
										case 5:$docV="Nota de envío";break; 
									}
									$tran->concepto="Venta ".$docV." ".$tran->seriev." ".$tran->numdocv;
								break;
								case 1:$tran->concepto="Pedido";break;
								case 2:$tran->concepto="Daño o vencimiento";break;
								case 3:$tran->concepto="Perdida o extravio";break;
								case 4:$tran->concepto="Devoluci&oacute;n a proveedor";break;
								case 5:$tran->concepto="Consumo interno";break;
								case 7:$tran->concepto="Anulaci&oacute;n de compra";break;
							}
						}
						echo "<tr>";
						echo "<td>".$tran->id."</td>";
						echo "<td>".date("d/m/Y H:i:s",strtotime($tran->fecha))."</td>";
						echo "<td>".$tran->concepto."</td>";
						echo "<td></td>";
						echo "<td></td>";
						echo "<td></td>";
						echo "<td>".($tran->entrada>0?number_format($tran->entrada,4):"")."</td>";
						echo "<td>".($tran->entrada>0?number_format($tran->costo,4):"")."</td>";
						echo "<td>".($tran->entrada>0?number_format(($tran->entrada*$tran->costo),4):"")."</td>";
						echo "<td>".($tran->salida>0?number_format($tran->salida,4):"")."</td>";
						echo "<td>".($tran->salida>0?number_format($costoPromedio,4):"")."</td>";
						echo "<td>".($tran->salida>0?number_format(($tran->salida*$costoPromedio),4):"")."</td>";
						echo "<td>".number_format($saldo,4)."</td>";
						echo "<td>".number_format($costoPromedio,4)."</td>";
						echo "<td>".number_format(($saldo*$costoPromedio),4)."</td>";
						echo "</tr>";
					}
				}
				echo "</tbody></table>";  
			}
			
	}

	function reporte_existencias(){
		$existencias=0;/*Escribir 0 para productos sin existencias o existencias negaticas*/
		$sql="SELECT productos.id_producto as id, presentaciones.sku_presentacion as sku, presentaciones.desc_presentacion as descrip FROM productos LEFT JOIN presentaciones ON presentaciones.id_producto=productos.id_producto AND presentaciones.tipo_presentacion=0 WHERE productos.exist_act_producto >=0";
		$productos= $this->Generic_model->sql_custom($sql);
		echo "<table border='1' cellspacing='0'>";
		echo "<tr>";
		echo "<th></th>";
		echo "<th>ID</th>";
		echo "<th>SKU</th>";
		echo "<th>Producto</th>";
		echo "<th>Conteo</th>";
		echo "<th>C. Unitario</th>";
		echo "</tr>";
		$iteration=0;
		foreach($productos as $producto){
			echo "<tr>";
			echo "<td>".$iteration."</td>";
			echo "<td>".$producto->id."</td>";
			echo "<td>".$producto->sku."</td>";
			echo "<td>".$producto->descrip."</td>";
			echo "<td></td>";
			echo "<td></td>";
			echo "</tr>";
			$iteration+=1;
		}
		echo "</table>";
	}
}
?>