gigafibre-fsm/docs/legacy-wizard/tele_wizard_subs.php
louispaulb 41d9b5f316 feat: flow editor, Gemini QR scanner with offline queue, dispatch planning v2
Major additions accumulated over 9 days — single commit per request.

Flow editor (new):
- Generic visual editor for step trees, usable by project wizard + agent flows
- PROJECT_KINDS / AGENT_KINDS catalogs decouple UI from domain
- Drag-and-drop reorder via vuedraggable with scope isolation per peer group
- Chain-aware depends_on rewrite on reorder (sequential only — DAGs preserved)
- Variable picker with per-applies_to catalog (Customer / Quotation /
  Service Contract / Issue / Subscription), insert + copy-clipboard modes
- trigger_condition helper with domain-specific JSONLogic examples
- Global FlowEditorDialog mounted once in MainLayout, Odoo inline pattern
- Server: targo-hub flow-runtime.js, flow-api.js, flow-templates.js
- ERPNext: Flow Template/Run doctypes, scheduler, 5 seeded system templates
- depends_on chips resolve to step labels instead of opaque "s4" ids

QR/OCR scanner (field app):
- Camera capture → Gemini Vision via targo-hub with 8s timeout
- IndexedDB offline queue retries photos when signal returns
- Watcher merges late-arriving scan results into the live UI

Dispatch:
- Planning mode (draft → publish) with offer pool for unassigned jobs
- Shared presets, recurrence selector, suggested-slots dialog
- PublishScheduleModal, unassign confirmation

Ops app:
- ClientDetailPage composables extraction (useClientData, useDeviceStatus,
  useWifiDiagnostic, useModemDiagnostic)
- Project wizard: shared detail sections, wizard catalog/publish composables
- Address pricing composable + pricing-mock data
- Settings redesign hosting flow templates

Targo-hub:
- Contract acceptance (JWT residential + DocuSeal commercial tracks)
- Referral system
- Modem-bridge diagnostic normalizer
- Device extractors consolidated

Migration scripts:
- Invoice/quote print format setup, Jinja rendering
- Additional import + fix scripts (reversals, dates, customers, payments)

Docs:
- Consolidated: old scattered MDs → HANDOFF, ARCHITECTURE, DATA_AND_FLOWS,
  FLOW_EDITOR_ARCHITECTURE, BILLING_AND_PAYMENTS, CPE_MANAGEMENT,
  APP_DESIGN_GUIDELINES
- Archived legacy wizard PHP for reference
- STATUS snapshots for 2026-04-18/19

Cleanup:
- Removed ~40 generated PDFs/HTMLs (invoice_preview*, rendered_jinja*)
- .gitignore now covers invoice preview output + nested .DS_Store

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 10:44:17 -04:00

130 lines
4.4 KiB
PHP

<?php
include_once "authentication.php";
if(isset($_POST['first_name'])){
$sql_epg = new mysqli('96.125.196.10', 'facturation', 'r2SnlWTyKjMzw5oQ', 'cargotv');
$sql_epg->set_charset("latin1_swedish_ci");
$address_id = $_POST['ws_delivery_id'];
$first_name = str_replace("'","",$sql_epg->real_escape_string(utf8_decode($_POST['first_name'])));
$last_name = str_replace("'","",$sql_epg->real_escape_string(utf8_decode($_POST['last_name'])));
$city = str_replace("'","", $sql_epg->real_escape_string(utf8_decode($_POST['city'])));
$code_postal = $_POST['zip'];
$address = str_replace("'","",$sql_epg->real_escape_string(utf8_decode($_POST['address'])));
//$civicno = $_POST['civicno'];
$civicno = $_POST['ws_delivery_id'];
$q_sub = "INSERT INTO `subs` (`groupid`,`fname`,`lname`,`city`,`zip`,`address`,`resellerid`,`status`,`defaultSaverTimeout`,`civicno`,`defPvrMaxHours`,`appProfileId`)
VALUES (2,'$first_name','$last_name','$city','$code_postal','$address',1,'ACTIVE',2147483647,'$civicno',100,1)";
if($sql_epg->query($q_sub)){
//echo "$q_sub <br><br>";
//print_r($sql_epg->error_list);
$subid = 0;
$subid = $sql_epg->insert_id;
$q_update = "UPDATE `delivery` SET `epg_subid` = $subid WHERE `id` = {$_POST['ws_delivery_id']}";
if($sql->query($q_update)){
//echo "$q_update <br><br>";
$sql_epg->close();
die("<form id='form_package' method='post' action='accueil.php?menu=tele_wizard_package'>
<input type='hidden' name='tw_delivery_id' value='$address_id'>
<input type='hidden' name='tw_sub_id' value='$subid'>
</form>
<script>
$('#form_package').submit();
</script>");
}
else{
echo "<div class='alert alert-danger'>Erreur Link epg->F. subid: $subid - delivery: {$_POST['ws_delivery_id']}</div>";
}
}
else{
echo "<div class='alert alert-danger'>Le compte n'a pu etre cree dans epg: {$sql_epg->error_list}</div>";
}
$sql_epg->close();
}
//debug
//$_POST['ws_delivery_id'] = 2;
$delivery_id = $_POST['ws_delivery_id'];
$res_delivery = $sql->query("SELECT * FROM `delivery` WHERE `id` = $delivery_id");
$row_delivery = $res_delivery->fetch_assoc();
$name = explode(' ',$row_delivery['name']);
$civicno = explode(' ',$row_delivery['address1']);
$civicno = str_replace(',','',$civicno[0]);
$civicno = str_replace(' ','',$civicno);
?>
<h3>Tele Wiz - Ouverture compte tele (epg)</h3><br>
<form class="form-horizontal" id='f_wiz_subs' method='POST' data-toggle="validator" role="form">
<input type='hidden' name='ws_delivery_id' value='<?php echo $_POST['ws_delivery_id'];?>'>
<div class="form-group">
<label class="col-sm-2 control-label">Prenom</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='first_name' id='first_name' value='<?php echo $name[0];?>'>
</div>
<span class='help-block with-errors'></span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Nom</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='last_name' id='last_name' value='<?php if(isset($name[1])) echo $name[1];?>'>
</div>
<span class='help-block with-errors'></span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Civic</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='civicno' id='civicno' value='<?php echo $civicno;?>'>
</div>
<span class='help-block with-errors'></span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Adresse</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='address' id='address' value='<?php echo $row_delivery['address1'];?>'>
</div>
<span class='help-block with-errors'>adresse complète incluant no. civic</span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Ville</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='city' id='city' value='<?php echo $row_delivery['city'];?>'>
</div>
<span class='help-block with-errors'></span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Code Postal</label>
<div class="col-sm-4">
<input type="text" class='form-control' name='zip' id='zip' value='<?php echo $row_delivery['zip'];?>'>
</div>
<span class='help-block with-errors'></span>
</div>
<br>
<button id='btn_submit' type='submit' class='btn btn-success'>Enregistrer</button>
</form>