feat: selector de pasarela (Bold/dLocal/ninguna) en regla + muestra {{.EnlacePago}} en editor de plantillas

This commit is contained in:
Lizandro Guarnizo
2026-05-01 12:47:13 -05:00
parent 8c4b401379
commit 0da9331a5e
4 changed files with 103 additions and 26 deletions
+3 -1
View File
@@ -82,7 +82,9 @@
<code>&#123;&#123;.FechaVencimiento&#125;&#125;</code>,
<code>&#123;&#123;.DiasRestantes&#125;&#125;</code>,
<code>&#123;&#123;.Total&#125;&#125;</code>,
<code>&#123;&#123;range .Servicios&#125;&#125;...&#123;&#123;.Nombre&#125;&#125; &#123;&#123;.Precio&#125;&#125;...&#123;&#123;end&#125;&#125;</code>
<code>&#123;&#123;range .Servicios&#125;&#125;...&#123;&#123;.Nombre&#125;&#125; &#123;&#123;.Precio&#125;&#125;...&#123;&#123;end&#125;&#125;</code>,
<code>&#123;&#123;.EnlacePago&#125;&#125;</code>
<span class="ml-1 text-blue-500">(URL de pago generada automáticamente por Bold o dLocal al enviar)</span>
</div>
<form @submit.prevent="save()">
+18 -3
View File
@@ -20,6 +20,7 @@
<th class="py-2 px-3">Días antes</th>
<th class="py-2 px-3">Plantilla</th>
<th class="py-2 px-3">Aplica a</th>
<th class="py-2 px-3">Pasarela</th>
<th class="py-2 px-3">Estado</th>
<th class="py-2 px-3 w-24"></th>
</tr>
@@ -35,6 +36,11 @@
<td class="py-2 px-3">
<span class="px-2 py-0.5 rounded text-xs bg-gray-100 text-gray-600" x-text="d.aplica_a"></span>
</td>
<td class="py-2 px-3">
<span class="px-2 py-0.5 rounded text-xs font-medium"
:class="d.pasarela_enlace==='dlocal' ? 'bg-blue-100 text-blue-700' : d.pasarela_enlace==='ninguna' ? 'bg-gray-100 text-gray-500' : 'bg-green-100 text-green-700'"
x-text="d.pasarela_enlace==='dlocal' ? 'dLocal' : d.pasarela_enlace==='ninguna' ? 'Ninguna' : 'Bold'"></span>
</td>
<td class="py-2 px-3">
<button @click="toggleActivo(d)"
:class="d.activo ? 'bg-green-500' : 'bg-gray-300'"
@@ -86,6 +92,15 @@
</template>
</select>
</div>
<div>
<label class="text-xs font-medium text-gray-600">Pasarela de pago (enlace)</label>
<select x-model="form.pasarela_enlace" class="mt-1 w-full border rounded px-3 py-2 text-sm">
<option value="bold">Bold (Colombia)</option>
<option value="dlocal">dLocal</option>
<option value="ninguna">Ninguna (sin enlace de pago)</option>
</select>
<p class="text-xs text-gray-400 mt-1">Genera automáticamente <code>{{.EnlacePago}}</code> al enviar</p>
</div>
<div>
<label class="text-xs font-medium text-gray-600">Aplica a</label>
<select x-model="form.aplica_a" class="mt-1 w-full border rounded px-3 py-2 text-sm">
@@ -133,7 +148,7 @@ document.addEventListener('alpine:init', () => {
loading: false, datos: [], plantillas: [],
addModal: false, editModal: false, deleteModal: false,
selectedId: null,
form: { nombre:'', dias_antes:30, plantilla_id:'', aplica_a:'todos', activo:true },
form: { nombre:'', dias_antes:30, plantilla_id:'', aplica_a:'todos', pasarela_enlace:'bold', activo:true },
toast: { show:false, msg:'', type:'ok' },
async init() {
@@ -151,7 +166,7 @@ document.addEventListener('alpine:init', () => {
},
openEdit(d) {
this.form = { nombre: d.nombre, dias_antes: d.dias_antes, plantilla_id: d.plantilla_id, aplica_a: d.aplica_a, activo: d.activo };
this.form = { nombre: d.nombre, dias_antes: d.dias_antes, plantilla_id: d.plantilla_id, aplica_a: d.aplica_a, pasarela_enlace: d.pasarela_enlace||'bold', activo: d.activo };
this.selectedId = d.ID;
this.editModal = true;
},
@@ -159,7 +174,7 @@ document.addEventListener('alpine:init', () => {
closeModals() {
this.addModal = this.editModal = this.deleteModal = false;
this.selectedId = null;
this.form = { nombre:'', dias_antes:30, plantilla_id:'', aplica_a:'todos', activo:true };
this.form = { nombre:'', dias_antes:30, plantilla_id:'', aplica_a:'todos', pasarela_enlace:'bold', activo:true };
},
async toggleActivo(d) {