2026-10-13 22:00:54 -05:00
|
|
|
<sbo-toolbar aria-label="Acciones del documento">
|
|
|
|
|
<a class="tb" routerLink=".." title="Volver a la lista"><sbo-icon name="find" />Lista</a>
|
|
|
|
|
<a class="tb" [routerLink]="isNew() ? '.' : '../nuevo'" title="Documento nuevo"><sbo-icon name="new" />Nuevo</a>
|
|
|
|
|
<span class="tb-sep"></span>
|
|
|
|
|
<button class="tb" type="button" aria-label="Primero" (click)="go('first')"><sbo-icon name="first" /></button>
|
|
|
|
|
<button class="tb" type="button" aria-label="Anterior" (click)="go('prev')"><sbo-icon name="prev" /></button>
|
|
|
|
|
<button class="tb" type="button" aria-label="Siguiente" (click)="go('next')"><sbo-icon name="next" /></button>
|
|
|
|
|
<button class="tb" type="button" aria-label="Último" (click)="go('last')"><sbo-icon name="last" /></button>
|
|
|
|
|
</sbo-toolbar>
|
|
|
|
|
|
|
|
|
|
<sbo-window [title]="windowTitle()" [badge]="badge()" [status]="status()">
|
|
|
|
|
@if (partner) {
|
|
|
|
|
<div class="sbo-hdr">
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-lookup-field
|
|
|
|
|
[label]="partner.label"
|
|
|
|
|
required
|
|
|
|
|
[readonly]="readOnly() || !isNew()"
|
|
|
|
|
[value]="str(header()['CardCode'])"
|
2026-10-14 11:42:51 -05:00
|
|
|
(valueChange)="onPartnerText($event)"
|
2026-10-13 22:00:54 -05:00
|
|
|
[lookup]="partnerLookup"
|
2026-10-14 11:42:51 -05:00
|
|
|
resolveOnLeave
|
2026-10-13 22:00:54 -05:00
|
|
|
(picked)="onPartner($event)"
|
|
|
|
|
/>
|
|
|
|
|
<sbo-text-field label="Nombre" readonly [value]="partnerName()" />
|
2026-10-14 14:48:50 -05:00
|
|
|
<sbo-text-field label="RUT" readonly [value]="partnerTaxId()" />
|
2026-10-13 22:00:54 -05:00
|
|
|
<sbo-text-field
|
|
|
|
|
label="Nº referencia"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['NumAtCard'])"
|
|
|
|
|
(valueChange)="setHeader('NumAtCard', $event)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-text-field label="Número" readonly [value]="str(doc()?.['DocNum'])" />
|
|
|
|
|
<sbo-date-field
|
|
|
|
|
label="Fecha de contabilización"
|
|
|
|
|
required
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['DocDate'])"
|
|
|
|
|
(valueChange)="setHeader('DocDate', $event)"
|
|
|
|
|
/>
|
|
|
|
|
<sbo-date-field
|
|
|
|
|
label="Fecha de vencimiento"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['DocDueDate'])"
|
|
|
|
|
(valueChange)="setHeader('DocDueDate', $event)"
|
|
|
|
|
/>
|
2026-10-14 14:48:50 -05:00
|
|
|
@if (folio) {
|
|
|
|
|
<sbo-field label="Folio">
|
|
|
|
|
<sbo-input
|
|
|
|
|
width="90px"
|
|
|
|
|
[maxlength]="10"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['FolioPrefixString'])"
|
|
|
|
|
(valueChange)="setHeader('FolioPrefixString', $event)"
|
|
|
|
|
/>
|
|
|
|
|
<sbo-input
|
|
|
|
|
ariaLabel="Número de folio"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['FolioNumber'])"
|
|
|
|
|
(valueChange)="setHeader('FolioNumber', $event)"
|
|
|
|
|
/>
|
|
|
|
|
</sbo-field>
|
|
|
|
|
}
|
2026-10-13 22:00:54 -05:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<sbo-lines-grid
|
|
|
|
|
[columns]="columns"
|
|
|
|
|
[lines]="lines()"
|
|
|
|
|
(linesChange)="setLines($event)"
|
2026-10-14 11:42:51 -05:00
|
|
|
(notice)="notify($event)"
|
2026-10-13 22:00:54 -05:00
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[newLine]="newLine"
|
|
|
|
|
[recalc]="recalc"
|
|
|
|
|
[multiAdd]="multi"
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<div class="sbo-hdr" style="margin-top: 14px">
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-textarea-field
|
|
|
|
|
label="Comentarios"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['Comments'])"
|
|
|
|
|
(valueChange)="setHeader('Comments', $event)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-text-field label="Total antes del descuento" readonly [value]="fmt(totals().subtotal)" />
|
|
|
|
|
<sbo-number-field
|
|
|
|
|
label="Descuento %"
|
|
|
|
|
[decimals]="2"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="+str(header()['DiscountPercent'])"
|
|
|
|
|
(valueChange)="setHeader('DiscountPercent', $event ?? 0)"
|
|
|
|
|
/>
|
|
|
|
|
<sbo-text-field label="Impuesto" readonly [value]="fmt(totals().tax)" />
|
|
|
|
|
<sbo-text-field label="Total del documento" readonly [value]="fmt(totals().total)" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-10-14 14:37:01 -05:00
|
|
|
} @else if (layout; as lay) {
|
|
|
|
|
<div class="sbo-hdr">
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
@for (f of lay.left; track f.key) {
|
|
|
|
|
<ng-container *ngTemplateOutlet="field; context: { $implicit: f }" />
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-text-field label="Número" readonly [value]="str(doc()?.['DocNum'])" />
|
|
|
|
|
@for (f of lay.right; track f.key) {
|
|
|
|
|
<ng-container *ngTemplateOutlet="field; context: { $implicit: f }" />
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<sbo-lines-grid
|
|
|
|
|
[columns]="columns"
|
|
|
|
|
[lines]="lines()"
|
|
|
|
|
(linesChange)="setLines($event)"
|
|
|
|
|
(notice)="notify($event)"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[newLine]="newLine"
|
|
|
|
|
[multiAdd]="multi"
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<div class="sbo-hdr" style="margin-top: 14px">
|
|
|
|
|
<div class="sbo-col">
|
|
|
|
|
<sbo-textarea-field
|
|
|
|
|
label="Comentarios"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()['Comments'])"
|
|
|
|
|
(valueChange)="setHeader('Comments', $event)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-10-13 22:00:54 -05:00
|
|
|
} @else {
|
|
|
|
|
<p>El formulario de este documento aún no está disponible. <a routerLink="..">Volver a la lista</a></p>
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-14 14:37:01 -05:00
|
|
|
@if ((partner || layout) && !readOnly()) {
|
2026-10-13 22:00:54 -05:00
|
|
|
<button sboActions class="btn main" type="button" [disabled]="saving() || loading()" (click)="save()">
|
|
|
|
|
{{ isNew() ? 'Crear' : 'Actualizar' }}
|
|
|
|
|
</button>
|
|
|
|
|
}
|
|
|
|
|
@if (conflict()) {
|
|
|
|
|
<button sboActions class="btn" type="button" (click)="reload()">Recargar</button>
|
|
|
|
|
}
|
|
|
|
|
<a sboActions class="btn" routerLink="..">{{ readOnly() ? 'Cerrar' : 'Cancelar' }}</a>
|
2026-10-14 11:59:07 -05:00
|
|
|
@if (partner && copyFromItems().length) {
|
|
|
|
|
<sbo-menu-button sboActionsEnd label="Copiar de" [items]="copyFromItems()" (picked)="copyFrom($event)" />
|
|
|
|
|
}
|
|
|
|
|
@if (partner && copyToItems().length) {
|
|
|
|
|
<sbo-menu-button sboActionsEnd label="Copiar a" [items]="copyToItems()" (picked)="copyTo($event)" />
|
|
|
|
|
}
|
2026-10-13 22:00:54 -05:00
|
|
|
</sbo-window>
|
2026-10-14 11:59:07 -05:00
|
|
|
|
|
|
|
|
@if (copyListScreen(); as src) {
|
|
|
|
|
<sbo-value-help
|
|
|
|
|
[open]="true"
|
2026-10-14 12:00:58 -05:00
|
|
|
[title]="'Copiar de: ' + copyListTitle()"
|
2026-10-14 11:59:07 -05:00
|
|
|
[resource]="src.resource"
|
|
|
|
|
[columns]="copyListColumns"
|
|
|
|
|
[baseFilter]="copyListFilter()"
|
|
|
|
|
orderby="DocEntry desc"
|
|
|
|
|
rowKey="DocEntry"
|
|
|
|
|
(selected)="copyPicked($event)"
|
|
|
|
|
(closed)="copyListFor.set(null)"
|
|
|
|
|
/>
|
|
|
|
|
}
|
2026-10-14 14:37:01 -05:00
|
|
|
|
|
|
|
|
<ng-template #field let-f>
|
|
|
|
|
@switch (f.type) {
|
|
|
|
|
@case ('date') {
|
|
|
|
|
<sbo-date-field
|
|
|
|
|
[label]="f.label"
|
|
|
|
|
[required]="!!f.required"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()[f.key])"
|
|
|
|
|
(valueChange)="setHeader(f.key, $event)"
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
@case ('warehouse') {
|
|
|
|
|
<sbo-lookup-field
|
|
|
|
|
[label]="f.label"
|
|
|
|
|
[required]="!!f.required"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()[f.key])"
|
|
|
|
|
(valueChange)="setHeader(f.key, $event)"
|
|
|
|
|
[lookup]="warehouseLookup"
|
|
|
|
|
resolveOnLeave
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
@default {
|
|
|
|
|
<sbo-text-field
|
|
|
|
|
[label]="f.label"
|
|
|
|
|
[readonly]="readOnly()"
|
|
|
|
|
[value]="str(header()[f.key])"
|
|
|
|
|
(valueChange)="setHeader(f.key, $event)"
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</ng-template>
|