diff --git a/app/app.ipynb b/app/app.ipynb index e3447dc..a6e1302 100644 --- a/app/app.ipynb +++ b/app/app.ipynb @@ -1944,7 +1944,7 @@ " if not resumen.empty: resumen.to_excel(w, sheet_name='Resumen', index=False)\n", "\n", "\n", - "def ejecutar_valores(plan, dry_run=True, progress=None, log=print):\n", + "def ejecutar_valores(plan, dry_run=True, aplicar_vtmn=True, aplicar_mptemp=False, progress=None, log=print):\n", " \"\"\"Paso B: UPDATE SPartidasExpo por cada partida del plan, usando 3-part\n", " naming si la fila trae BaseDeDatos/Esquema (cuando se uso shelter).\n", " Transaccion por (pedimento, BD) rollback si alguna partida falla.\"\"\"\n", @@ -1968,14 +1968,21 @@ " target = f'[{db}].[{esq}].SPartidasExpo'\n", " else:\n", " target = 'SPartidasExpo'\n", - " upd_sql = f\"UPDATE {target} SET VALORTOTALME = ?, VALORTOTALMN = ? WHERE FACTURAEXPO = ? AND LINEA = ?\"\n", + " sets, params_tmpl = ['VALORTOTALME = ?'], ['ME']\n", + " if aplicar_vtmn:\n", + " sets.append('VALORTOTALMN = ?'); params_tmpl.append('MN')\n", + " if aplicar_mptemp:\n", + " sets.append('ValorMPTempMN = ?'); params_tmpl.append('MN')\n", + " upd_sql = f\"UPDATE {target} SET {', '.join(sets)} WHERE FACTURAEXPO = ? AND LINEA = ?\"\n", " try:\n", " with scaii_conn.cursor() as cur:\n", " for _, p in fil.iterrows():\n", " if not dry_run:\n", - " cur.execute(upd_sql,\n", - " float(p['NUEVO_ME']), float(p['NUEVO_MN']),\n", - " p['FACTURAEXPO'], int(p['LINEA']))\n", + " vals = []\n", + " for t in params_tmpl:\n", + " vals.append(float(p['NUEVO_ME']) if t == 'ME' else float(p['NUEVO_MN']))\n", + " vals.extend([p['FACTURAEXPO'], int(p['LINEA'])])\n", + " cur.execute(upd_sql, *vals)\n", " upd += 1\n", " if not dry_run: scaii_conn.commit()\n", " except Exception as e:\n", @@ -4577,6 +4584,8 @@ "btn_val_xlsx.on_click(_on_val_xlsx)\n", "\n", "dry_val = W.Checkbox(value=True, description='DRY_RUN (simular sin escribir)')\n", + "chk_val_vtmn = W.Checkbox(value=True, description='Aplicar a VALORTOTALMN', indent=False, layout={'width':'280px'})\n", + "chk_val_mptemp = W.Checkbox(value=False, description='Aplicar a ValorMPTempMN', indent=False, layout={'width':'280px'})\n", "btn_val_ejecutar = W.Button(description='Ejecutar ajuste (Paso B)', button_style='warning', icon='play', layout={'width':'280px'})\n", "bar_val_b = _mkbar('Ejecucion Valores')\n", "out_val_ejec = W.Output(layout=OUT_STYLE)\n", @@ -4588,7 +4597,10 @@ " if 'val_plan' not in _state:\n", " print('ERROR: corre primero Analizar.'); return\n", " print(f'(DB actual: {DB_ACTUAL})')\n", - " ejecutar_valores(_state['val_plan'], dry_run=dry_val.value, log=print, progress=bar_val_b)\n", + " ejecutar_valores(_state['val_plan'], dry_run=dry_val.value,\n", + " aplicar_vtmn=bool(chk_val_vtmn.value),\n", + " aplicar_mptemp=bool(chk_val_mptemp.value),\n", + " log=print, progress=bar_val_b)\n", "btn_val_ejecutar.on_click(_on_val_ejecutar)\n", "\n", "tab_valores = W.VBox([\n", @@ -4610,6 +4622,8 @@ " '

UPDATE VALORTOTALME y VALORTOTALMN por (FACTURAEXPO, LINEA). '\n", " 'Corre primero con DRY_RUN activado.

'),\n", " W.HBox([dry_val]),\n", + " W.HTML('Columnas MN a actualizar:'),\n", + " W.HBox([chk_val_vtmn, chk_val_mptemp]),\n", " btn_val_ejecutar, bar_val_b,\n", " out_val_ejec,\n", "])\n",