]$
p%oykNS{g2sDِg'KC?O}LX_RwMJ3!"g
K|.BI_w00y>=>E[DYtHa+\Ij=/!I?<Y#_'>Ҟ}H^Z:b;KTLj89u<tّ?Gh-jZc}VKEuIfo~·AfݬɨYъ,jw!쥏}V48JgֶHl7e*;oa|)KX@_<y]SnwWĩCV?_KZr?&HͪBPN;JP?I,\9|uBS:Uw̺l>8vx~\Wr٭<g5Й[?|({`@,c\]@6шf%,[ _	-CPhSI{ulKM91v{3ܔ?5enӚs2Iïɪ-.FcnSS@DŽe&n62,4y(oⳚ6r/ڡO7˅Q6nERD%]BzA Xx\UC.6 ybhrٴC}n]QqKb%Sr;=AdxمWyKf%*(cZEN˸T@Pj+',wH*~b`S|oߏ㶴u`=9źUc 8)m>N!͵29y% &y4lAһx&eSZo>mklˀuaNe^wsH]{QVp0[==y}[|:sTCEuQF@&J{Jq켖' 9AHߑ_E.At?W𝫴QJ-3j8F;NӫHP7KN{ʇj>[@Re0q7GOAHCj()}`uWJJDO>PrٴC}n]Qq*!8Ud9Xۊ'(>ِPWxR&ų}"1jr^Jtʺ:v2iX?rsCn%L_,D6.$b (|j'l[{ӻx\pŁ|2&mT] 3c!ǀ6Zj\u~,2n	m
<|~(s7Z 1ZӄS>/:ɗ	tOu#q>OTg4~9yW
\m!Oj徤a#@xaB^ϿN)oll_'dkYZԬ%Bp
)SL(\5y#ilZ?_廳h^d}]&>E2IAzBP:Ӄ/v7xr&8m:U\ǘaVYql)l,2id	2Jf5	d8U9 zw02IN?'?f&9CC٬zZ~К#氽Ýiȶ~?LZ.;`/o05Q\pggwD[*w^{뒤o!M~*d{Z}ć:<D_
sMvV.1ge7Aa7WwTdMyCdŊyuNcmE׿9GYy3"A xd~LDx]F*>|ČHC<8h͑
q\4[M)0$Y.:/Im6g\[i'x?5nW	 '[4N8QMǯϴ'߲,>s^8J? D-sgwm?#piODd+b`XB{뒤o!M~*d{Z}ć:֖
_b!XyrqDTC 
Gaw]s9kĩk!7谅Јn{
ڪǒy]3Ƭ&Kp6vXUyj>:n[:ѕa)b\Sj~\f:v>L"ΛPH'ї2+PcM_P6ILZaVqx6魐Ýֆ6ycNyaV7X 	<g5Й[?|({`@,cV7X 	<g5Й[?|({`@,cV7X 	^5'M9	1ˎ7('($W<hMzDgsfݫzͣگl[dg<O^Z˥6C4N&'iƲ06 ~$ݷs,WGj4Eԫ=9A,"	kY{r3/Po2=% nMiN
Kٖl^n}j$OMzDgsfݫzͣگl[dg<O^^Z8,mKf~`˯' 7U!	fM?LvU	0=(7E.쯢	A,"	kY{wHtaLL@2YsZ@E6br@)rs±Ol+<m0).O CQ҃]=3ј5EjҷF",ُ$Uk1Bua;O#f<_{P5+]
Y bzzO_3wt-P杒;7|v=!R:A`c@I;+oK'Watح׵:/9X0Ru32تP3E@
"%>˸_j]`B>qV7X 	<g5Й[?|)`pv45tV{H7DvOտEꈸ'zP-iYy)^%Zw¥#MA	fME[vtEBjcyhawDޔj+GJ-}
m-':Zپ1
VvZs1gc{lTӮh]E r]8Нm]+gƒSʅlM,!kTAWrq"Gw |$(&sI+ǜfp SOkFqƠY<g5Й[?|({`@,cV7X 	<g5Й[?|ӏZp Jf/ݗ+j_9("GKe1m%O6lh N NqGe*XskUH/ߐ,݁e f(Ob^P(?0!gO, f!ѫD*Eҋ%a.SxZ3C.V܄diK!ٴ&~;lQ2? ꢠ!@֢`ݑ0XWpzr̪1x 9Ys<<yI'R̐({`@,cV7X 	<g5Й[?|({`@,cV7X 	<g5Й[?|({`@,c,	Q_`O{?[F[O
ס9U
k^t.5/1+%R+x>W)D.*Qb+Yi>+`hh3fZnd/&QiᠭӴȹ`:HEHMc.#	?LN=rrkŲG&DЄ٢ZP]
BѕE؟iڍ0w(axwwｸQl2p*iImp / (100 + $tiImp) * $qdev, 2) : 0;
    $total_nc += $precio * $qdev;
    $itbis_nc += $imp;
}
$total_nc = round($total_nc, 2);
$itbis_nc = round($itbis_nc, 2);

// ── INSERT cabecera en devoluciones (una sola fila por NC) ─────
$sql_cab = "INSERT INTO devoluciones SET
    nota_credito = '$nota_credito',
    folio        = '$folio',
    cliente      = '$cliente',
    importe      = '$total_nc',
    impuesto     = '$itbis_nc',
    fecha        = '$fecha',
    hora         = '$hora',
    usuario      = '$usuario'";

mysql_query($sql_cab) or die(json_encode(["ok"=>false,"msg"=>mysql_error()]));
$id_devolucion = mysql_insert_id();

// ── INSERT detalle en detalle_devolucion (una fila por articulo) ──
foreach ($items as $item) {
    $codigo      = mysql_real_escape_string($item["codigo"]);
    $descripcion = mysql_real_escape_string($item["descripcion"]);
    $cantidad_orig= (float)$item["cantidad_orig"];
    $cantidad_dev = (float)$item["cantidad_dev"];
    $precio       = (float)$item["precio"];
    $costo        = (float)$item["costo"];
    $tipo_impuesto= (float)$item["tipo_impuesto"];
    $valor_impuesto=(float)$item["valor_impuesto"];
    $imp_dev      = $tipo_impuesto > 0 ? round($precio * $tipo_impuesto / (100 + $tipo_impuesto) * $cantidad_dev, 2) : 0;
    $importe      = round($precio * $cantidad_dev, 2);

    $sql_det = "INSERT INTO detalle_devolucion SET
        id_devolucion = '$id_devolucion',
        nota_credito  = '$nota_credito',
        folio_venta   = '$folio',
        codigo        = '$codigo',
        descripcion   = '$descripcion',
        cantidad_orig = '$cantidad_orig',
        cantidad_dev  = '$cantidad_dev',
        precio        = '$precio',
        costo         = '$costo',
        tipo_impuesto = '$tipo_impuesto',
        impuesto_dev  = '$imp_dev',
        importe       = '$importe',
        fecha         = '$fecha',
        hora          = '$hora',
        usuario       = '$usuario'";

    mysql_query($sql_det) or die(json_encode(["ok"=>false,"msg"=>mysql_error()]));

    // Restaurar stock (en unidades base segun presentacion suelto/paquete)
    $q_fac = mysql_query("SELECT factor_presentacion FROM detalle_venta WHERE folio='$folio' AND codigo='$codigo' LIMIT 1");
    $fac_dev = ($q_fac && mysql_num_rows($q_fac) > 0 && (float)mysql_result($q_fac, 0, "factor_presentacion") > 0) ? (float)mysql_result($q_fac, 0, "factor_presentacion") : 1;
    $cant_base_dev = $cantidad_dev * $fac_dev;
    mysql_query("UPDATE productos SET stock = stock + '$cant_base_dev' WHERE codigo='$codigo' LIMIT 1");
}

// ── Enviar Nota de Crédito Electrónica a GAE ───────────────────
$ecf_nc_result = array('ok' => false, 'ncf_nc' => '', 'error' => '');
$balance_aplicado = 0;

// Verificar si la factura original tiene NCF electrónico (E prefix)
$qv_ncf = mysql_query("SELECT ncf, tipo_ncf FROM ventas WHERE folio='$folio' LIMIT 1");
$rv_ncf = mysql_fetch_assoc($qv_ncf);
$es_electronica = ($rv_ncf && substr($rv_ncf['tipo_ncf'], 0, 1) === 'E');

if ($es_electronica) {
    include_once("../ecf/ecf_nota_credito.php");
    $ecf_nc_result = ecf_enviar_nota_credito($id_devolucion);
    // El balance de la venta se reduce SOLO si GAE confirma el envío exitoso.
    // Si DGII luego rechaza, ecf_verificar_portal.php NO aplicará el balance.
    // Si queda PENDIENTE, ecf_verificar_portal.php lo aplica al confirmar ACEPTADO.
    if ($ecf_nc_result['ok']) {
        mysql_query("UPDATE ventas SET balance=balance - $total_nc, total = total - $total_nc, impuesto = impuesto - $itbis_nc WHERE folio='$folio' LIMIT 1");
        mysql_query("UPDATE ventas SET balance=0 WHERE balance < 0 AND folio='$folio' LIMIT 1");
        mysql_query("UPDATE devoluciones SET balance_aplicado=1 WHERE id=$id_devolucion LIMIT 1");
        $balance_aplicado = 1;
    }
    // Si falla el envío (PENDIENTE), el balance se aplica cuando el cron
    // ecf/ecf_verificar_portal.php confirme ACEPTADO desde DGII.
} else {
    // Factura no electrónica: aplicar reducción de balance inmediatamente
    mysql_query("UPDATE ventas SET balance=balance - $total_nc, total = total - $total_nc, impuesto = impuesto - $itbis_nc WHERE folio='$folio' LIMIT 1");
    mysql_query("UPDATE ventas SET balance=0 WHERE balance < 0 AND folio='$folio' LIMIT 1");
    mysql_query("UPDATE devoluciones SET balance_aplicado=1 WHERE id=$id_devolucion LIMIT 1");
    $balance_aplicado = 1;
}

echo json_encode([
    "ok"              => true,
    "nota_credito"    => $nota_credito,
    "total"           => $total_nc,
    "itbis"           => $itbis_nc,
    "folio"           => $folio,
    "cliente"         => $cliente,
    "id_devolucion"   => $id_devolucion,
    "ncf_nc"          => $ecf_nc_result['ncf_nc'],
    "ecf_ok"          => $ecf_nc_result['ok'],
    "ecf_error"       => $ecf_nc_result['error'],
    "balance_aplicado"=> $balance_aplicado
]);
?>
