feat(web): la matrícula propone Dockey@ (layout de documento) como parámetro del documento y muestra a cuántos documentos se asocia
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0f43e6cac7
commit
8ed44aa55b
3 files changed
+18
-6
No files matched your search
@@ -38,6 +38,9 @@ const KINDS: { value: GatewayParamKind; label: string }[] = [
|
||||
];
|
||||
const yesNo = [{ value: YES, label: YES }, { value: NO, label: NO }];
|
||||
|
||||
/** El parámetro `Dockey@` es el de los layouts de documento de SAP: recibe el número del documento. */
|
||||
export const dockeyParam = (params: readonly { name: string }[]): string => params.find((p) => /^dockey@/i.test(p.name))?.name ?? '';
|
||||
|
||||
/** Una definición de parámetro como fila editable de la tabla. */
|
||||
const toRow = (p: GatewayParam): Row => ({
|
||||
name: p.name,
|
||||
@@ -106,7 +109,7 @@ export function toParam(r: Row): GatewayParam {
|
||||
<p class="hint">«Tipo de control» decide cómo se pide al usuario; con «Ventana de selección» se elige la lista. «Oculto» es para títulos y separadores del reporte: no se piden ni se envían. «Opciones» de una lista fija: <code>valor=etiqueta; valor=etiqueta</code>.</p>
|
||||
<sbo-rows-table [columns]="columns" [rows]="d.params" (rowsChange)="patch({ params: $event })" [removable]="false" emptyText="El reporte no tiene parámetros." />
|
||||
<h2>Botón PDF de los documentos</h2>
|
||||
<p class="hint">Marque los documentos que ofrecen este formato. El que se marca «Por defecto» es el que abre el botón «PDF» de ese documento (uno solo por documento, como en SAP); los demás salen en «Otros formatos». El número del documento (<code>DocEntry</code>) se envía en el parámetro elegido abajo; los demás parámetros toman su valor por defecto.</p>
|
||||
<p class="hint">Un reporte con el parámetro <code>Dockey@</code> es un layout de documento de SAP y se propone solo aquí. Marque los documentos que ofrecen este formato. El que se marca «Por defecto» es el que abre el botón «PDF» de ese documento (uno solo por documento, como en SAP); los demás salen en «Otros formatos». El número del documento (<code>DocEntry</code>) se envía en el parámetro elegido abajo; los demás parámetros toman su valor por defecto.</p>
|
||||
<sbo-select-field label="Parámetro del documento" [options]="documentParamOptions(d)" [value]="d.documentParam" (valueChange)="patch({ documentParam: '' + ($event ?? '') })" />
|
||||
<table class="grid docs">
|
||||
<thead><tr><th>Documento</th><th class="chk">Ofrecer</th><th class="chk">Por defecto</th></tr></thead>
|
||||
@@ -126,7 +129,7 @@ export function toParam(r: Row): GatewayParam {
|
||||
</div>
|
||||
<table class="grid">
|
||||
<thead>
|
||||
<tr><th>Código</th><th>Título</th><th>Categoría</th><th class="num">Parámetros</th><th>Estado</th><th></th></tr>
|
||||
<tr><th>Código</th><th>Título</th><th>Categoría</th><th class="num">Parámetros</th><th>Documentos</th><th>Estado</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@for (r of rows(); track r.code) {
|
||||
@@ -135,6 +138,7 @@ export function toParam(r: Row): GatewayParam {
|
||||
<td>{{ r.title }}</td>
|
||||
<td>{{ r.category }}</td>
|
||||
<td class="num">{{ r.params.length }}</td>
|
||||
<td>{{ r.documents?.length ? r.documents!.length + ' documento(s)' : '' }}</td>
|
||||
<td>{{ r.enabled ? 'Habilitado' : 'Deshabilitado' }}</td>
|
||||
<td class="acts">
|
||||
<button type="button" class="btn" (click)="edit(r)">Editar</button>
|
||||
@@ -147,7 +151,7 @@ export function toParam(r: Row): GatewayParam {
|
||||
</td>
|
||||
</tr>
|
||||
} @empty {
|
||||
<tr class="none"><td colspan="6">{{ registry.isLoading() ? 'Cargando…' : 'Aún no hay reportes matriculados. Pulse «Matricular reporte».' }}</td></tr>
|
||||
<tr class="none"><td colspan="7">{{ registry.isLoading() ? 'Cargando…' : 'Aún no hay reportes matriculados. Pulse «Matricular reporte».' }}</td></tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -271,7 +275,7 @@ export class RegistryPage {
|
||||
this.message.set({ kind: 'info', text: `Cargando los parámetros de ${chosen.code}…` });
|
||||
try {
|
||||
const params = await this.api.parameters(chosen.code);
|
||||
this.draft.set({ code: chosen.code, isNew: true, title: chosen.name, category: 'Otros', description: '', enabled: true, params: params.map(toRow), documents: [], documentParam: '', defaultFor: [] });
|
||||
this.draft.set({ code: chosen.code, isNew: true, title: chosen.name, category: 'Otros', description: '', enabled: true, params: params.map(toRow), documents: [], documentParam: dockeyParam(params), defaultFor: [] });
|
||||
this.message.set(null);
|
||||
} catch (e) {
|
||||
this.message.set({ kind: 'err', text: apiErrorMessage(e) });
|
||||
@@ -281,7 +285,7 @@ export class RegistryPage {
|
||||
// --- editar y guardar ----------------------------------------------------------------------------
|
||||
|
||||
protected edit(r: GatewayReport): void {
|
||||
this.draft.set({ code: r.code, isNew: false, title: r.title, category: r.category, description: r.description ?? '', enabled: r.enabled, params: r.params.map(toRow), documents: r.documents ?? [], documentParam: r.documentParam ?? '', defaultFor: r.defaultFor ?? [] });
|
||||
this.draft.set({ code: r.code, isNew: false, title: r.title, category: r.category, description: r.description ?? '', enabled: r.enabled, params: r.params.map(toRow), documents: r.documents ?? [], documentParam: r.documentParam ?? dockeyParam(r.params), defaultFor: r.defaultFor ?? [] });
|
||||
this.message.set(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -201,3 +201,11 @@ describe('toParam', () => {
|
||||
expect(toParam({ name: 'Q', kind: 'lookup', lookup: 'articulos' })).not.toHaveProperty('options');
|
||||
});
|
||||
});
|
||||
|
||||
describe('layouts de documento', () => {
|
||||
it('el parámetro Dockey@ se propone como el que recibe el número del documento', async () => {
|
||||
const { dockeyParam } = await import('./registry.page');
|
||||
expect(dockeyParam([{ name: 'Title@Title' }, { name: 'Dockey@' }])).toBe('Dockey@');
|
||||
expect(dockeyParam([{ name: 'Item@Select * from OITM' }])).toBe('');
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user