<?php
require_once __DIR__.'/../../config/auth.php'; require_once __DIR__.'/_finanzas.php';
$error='';
if(($_SERVER['REQUEST_METHOD']??'GET')==='POST'){
 $fecha=$_POST['fecha']??'';$tercero=$_POST['tercero']??'';$descripcion=limpiar($_POST['descripcion']??'');$naturaleza=$_POST['naturaleza']??'';$monto=monto_formulario($_POST['monto']??0);$vence=$_POST['fecha_vencimiento']??'';
 [$tipo,$terceroId]=array_pad(explode(':',$tercero,2),2,'');$terceroId=(int)$terceroId;
 if(!$fecha||!$vence||!in_array($tipo,['Cliente','Proveedor'],true)||!in_array($naturaleza,['A Cobrar','A Pagar'],true)||!$terceroId||!$descripcion||$monto<=0)$error='Complete correctamente todos los campos.';
 elseif(($naturaleza==='A Cobrar'&&$tipo!=='Cliente')||($naturaleza==='A Pagar'&&$tipo!=='Proveedor'))$error='A Cobrar requiere un cliente y A Pagar requiere un proveedor.';
 else{$codigo=nuevo_codigo($conn,'ingresos_egresos','IE');$cliente=$tipo==='Cliente'?$terceroId:null;$proveedor=$tipo==='Proveedor'?$terceroId:null;$s=$conn->prepare('INSERT INTO ingresos_egresos(codigo,fecha,tercero_tipo,cliente_id,proveedor_id,descripcion,naturaleza,monto,fecha_vencimiento) VALUES(?,?,?,?,?,?,?,?,?)');$s->bind_param('sssiissds',$codigo,$fecha,$tipo,$cliente,$proveedor,$descripcion,$naturaleza,$monto,$vence);if($s->execute()){registrar_auditoria($conn,'INSERT','ingresos_egresos',$s->insert_id,$codigo);header('Location: ingresos_egresos.php');exit;}$error=$s->error;}
}
$terceros=opciones_terceros($conn);
$lista=$conn->query("SELECT ie.*,COALESCE(c.nombre,p.nombre) tercero,COALESCE(SUM(cm.monto),0) pago,ie.monto-COALESCE(SUM(cm.monto),0) saldo FROM ingresos_egresos ie LEFT JOIN clientes c ON c.id=ie.cliente_id LEFT JOIN proveedores p ON p.id=ie.proveedor_id LEFT JOIN caja_movimientos cm ON cm.ingreso_egreso_id=ie.id GROUP BY ie.id ORDER BY ie.fecha DESC,ie.id DESC");
include __DIR__.'/../../includes/header.php';include __DIR__.'/../../includes/sidebar.php';?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content"><div class="d-flex justify-content-between align-items-center mb-3"><div><h3 class="page-title mb-1">Ingresos/Egresos</h3><p class="text-muted mb-0">Documentos a cobrar y a pagar.</p></div><button class="btn btn-hm" data-bs-toggle="collapse" data-bs-target="#nuevo">Nuevo</button></div>
<?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?><div id="nuevo" class="collapse <?=$error?'show':''?>"><div class="card card-hm mb-3"><div class="card-body"><form method="post" class="row g-3"><div class="col-md-3"><label>Fecha *</label><input class="form-control" type="date" name="fecha" value="<?=date('Y-m-d')?>" required></div><div class="col-md-5"><label>Cliente o proveedor *</label><input class="form-control" name="tercero_texto" list="terceros" id="terceroTexto" autocomplete="off" required><input type="hidden" name="tercero" id="terceroValor"><datalist id="terceros"><?php foreach($terceros as $t):?><option data-value="<?=e($t['valor'])?>" value="<?=e($t['texto'])?>"><?php endforeach;?></datalist></div><div class="col-md-4"><label>Tipo *</label><select class="form-select" name="naturaleza" required><option>A Cobrar</option><option>A Pagar</option></select></div><div class="col-md-8"><label>Descripción *</label><input class="form-control" name="descripcion" required></div><div class="col-md-2"><label>Monto *</label><input class="form-control numero-miles text-end" name="monto" required></div><div class="col-md-2"><label>Vencimiento *</label><input class="form-control" type="date" name="fecha_vencimiento" required></div><div class="col-12"><button class="btn btn-hm">Guardar</button></div></form></div></div></div>
<input id="buscar" class="form-control mb-3" placeholder="Buscar por cualquier dato"><div class="card card-hm"><div class="card-body table-responsive"><table class="table table-hover" id="tabla"><thead><tr><th>Código</th><th>Fecha</th><th>Cliente/Proveedor</th><th>Descripción</th><th>Tipo</th><th>Vencimiento</th><th class="text-end">Monto</th><th class="text-end">Pago</th><th class="text-end">Saldo</th></tr></thead><tbody><?php while($x=$lista->fetch_assoc()):?><tr><td><?=e($x['codigo'])?></td><td><?=e($x['fecha'])?></td><td><?=e($x['tercero'])?></td><td><?=e($x['descripcion'])?></td><td><?=e($x['naturaleza'])?></td><td><?=e($x['fecha_vencimiento'])?></td><td class="text-end"><?=numero_py($x['monto'])?></td><td class="text-end"><?=numero_py($x['pago'])?></td><td class="text-end"><?=numero_py($x['saldo'])?></td></tr><?php endwhile;?></tbody></table></div></div></div></main>
<script>const tt=document.getElementById('terceroTexto'),tv=document.getElementById('terceroValor');tt?.addEventListener('input',()=>{const o=[...document.querySelectorAll('#terceros option')].find(x=>x.value===tt.value);tv.value=o?.dataset.value||''});buscar.oninput=()=>document.querySelectorAll('#tabla tbody tr').forEach(x=>x.hidden=!x.innerText.toLowerCase().includes(buscar.value.toLowerCase()));</script><?php include __DIR__.'/../../includes/footer.php';?>
