Playwright Tests / test (push) Canceled after 0s
Lets a back-office user correct/define which invoice line belongs to which "set" and how deep it is nested, instead of relying only on the implicit "everything after a Set header until the next Set" grouping fds__prepInvoice derives. Sets may contain sets; every change applies immediately to the cached draft session and is reflected in the editor and PDF (ADR 0006/0008). Backend: - InvoiceSetStructure: pure parent-link forest (assign, change level, create, place/move-sibling, depth-first linearise + level recompute). - InvoiceDraftSetStructureDeltas: new inv/dpatch targets set.assign, set.level, set.create, set.move. - InvoiceSetPricing.Build is now order-preserving and nesting-aware (governed by the nearest converted ancestor); the set-item switch sums a header's transitive descendants so nested conversions never double-count. - FuchsPdf indents nested set members per level, mirroring the editor. Frontend: - New fis.inv_sets.js: "Set-Struktur bearbeiten" dialog — per-block table of all lines with drag & drop reorder (before/after/into), ▲▼ order and ◀▶ level buttons, fold/unfold per set (view-only), and a create bar for new Set/Text lines. Posts one delta per action; the dialog is a pure view of the server state (ADR 0006). - _Layout.cshtml / fis_main.js: cache-bust the dynamically imported per-module bundles (web/fis.<mdl>.<locale>.js/.css) with an asset version derived from the newest bundle write time, so a gulp rebuild is picked up without a stale cached module. Docs: ADR 0016, live-draft-editing concept, INVOICE_SET_PRICING.md, USER_GUIDE.md, ARCHITECTURE.md updated. Tests: InvoiceSetStructureTests (new) + additions to InvoiceDraftServiceTests/InvoiceSetPricingTests. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
196 lines
5.4 KiB
JSON
196 lines
5.4 KiB
JSON
[
|
|
{
|
|
"context": "intranet",
|
|
"outputFileName": "wwwroot/web/fisb.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"css/intranet/oci_basic.scss",
|
|
"css/intranet/oci_login.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet",
|
|
"outputFileName": "wwwroot/web/fis.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"css/intranet/oci_glyphicons.scss",
|
|
"css/intranet/oci_basic.scss",
|
|
"css/intranet/oci_login.scss",
|
|
"css/intranet/oci_nav.scss",
|
|
"css/intranet/oci_main.scss",
|
|
"css/intranet/fis_main.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet",
|
|
"outputFileName": "wwwroot/web/fisb.min.js",
|
|
"inputFiles": [
|
|
"js/intranet/oci_texts_basic_de.js",
|
|
"js/intranet/oci_basic.js",
|
|
"js/intranet/oci_basic_go.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet",
|
|
"outputFileName": "wwwroot/web/fis.min.js",
|
|
"inputFiles": [
|
|
"js/intranet/oci_texts_basic_de.js",
|
|
"node_modules/@microsoft/signalr/dist/browser/signalr.min.js",
|
|
"js/intranet/oci_texts_gui_de.js",
|
|
"js/intranet/oci_texts_val_de.js",
|
|
"web/loadcss/loadCSS.js",
|
|
"web/loadcss/onloadCSS_array.js",
|
|
"js/intranet/oci_basic.js",
|
|
"js/intranet/oci_mainbase.js",
|
|
"js/intranet/oci_main_menu.js",
|
|
"js/intranet/oci_main.js",
|
|
"js/intranet/oci_sortable.js",
|
|
"js/intranet/oci_draggable.js",
|
|
"js/intranet/oci_go.js",
|
|
"js/intranet/fis_texts_gui_de.js",
|
|
"js/intranet/fis_main.js",
|
|
"js/intranet/fis_main_menu.js",
|
|
"js/intranet/fis_main_go.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"outputFileName": "wwwroot/web/tools.js",
|
|
"inputFiles": [
|
|
"Scripts/jquery-3*.min.js",
|
|
"!Scripts/*.slim.min.js"
|
|
],
|
|
"inputFiles_tominify": [
|
|
"node_modules/js-cookie/dist/js.cookie.js"
|
|
],
|
|
"minify": { "enabled": false }
|
|
},
|
|
{
|
|
"context": "intranet:inv",
|
|
"outputFileName": "wwwroot/web/fis.inv.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.req_txt_de.js",
|
|
"js/intranet/modules/fis.inv_txt_de.js",
|
|
"js/intranet/modules/fis.inv.js",
|
|
"js/intranet/modules/fis.inv_shared.js",
|
|
"js/intranet/modules/fis.inv_sets.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:inv",
|
|
"outputFileName": "wwwroot/web/fis.inv.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.inv.scss",
|
|
"js/intranet/modules/fis.inv_shared.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:req",
|
|
"outputFileName": "wwwroot/web/fis.req.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.req_txt_de.js",
|
|
"js/intranet/modules/fis.inv_txt_de.js",
|
|
"js/intranet/modules/fis.req.js",
|
|
"js/intranet/modules/fis.inv_shared.js",
|
|
"js/intranet/modules/fis.inv_sets.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:req",
|
|
"outputFileName": "wwwroot/web/fis.req.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.req.scss",
|
|
"js/intranet/modules/fis.inv_shared.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:rep",
|
|
"outputFileName": "wwwroot/web/fis.rep.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.rep_txt_de.js",
|
|
"js/intranet/modules/fis.rep.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:rep",
|
|
"outputFileName": "wwwroot/web/fis.rep.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.rep.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:bam",
|
|
"outputFileName": "wwwroot/web/fis.bam.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.bam_txt_de.js",
|
|
"js/intranet/modules/fis.bam.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:bam",
|
|
"outputFileName": "wwwroot/web/fis.bam.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.bam.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:admin",
|
|
"outputFileName": "wwwroot/web/fis.admin.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.admin_txt_de.js",
|
|
"js/intranet/modules/fis.admin.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:admin",
|
|
"outputFileName": "wwwroot/web/fis.admin.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.admin.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:usr",
|
|
"outputFileName": "wwwroot/web/fis.usr.de.js",
|
|
"inputFiles": [
|
|
"js/intranet/modules/fis.usr_txt_de.js",
|
|
"js/intranet/modules/fis.usr.js"
|
|
],
|
|
"minify": { "enabled": true }
|
|
},
|
|
{
|
|
"context": "intranet:usr",
|
|
"outputFileName": "wwwroot/web/fis.usr.min.css",
|
|
"inputFiles": [
|
|
"css/intranet/oci_variables.scss",
|
|
"css/intranet/fis_variables.scss",
|
|
"js/intranet/modules/fis.usr.scss"
|
|
],
|
|
"minify": { "enabled": true }
|
|
}
|
|
]
|