1import {I,dQ as x$1,a as Ti,s as sC,A as A_,a4 as zu,a5 as rg,z as zw,a6 as Wu,a7 as ug,J as JC,d as cE,aV as sg,X as XC,g as gw,_ as _g}from'./main-IULO3ZKV.js';function P(e,d){e&1&&(rg(0,"span",15),zw(1," Generating\u2026 "));}function x(e,d){e&1&&(rg(0,"i",16),zw(1,"Download PDF "));}function E(e,d){e&1&&(rg(0,"span",15),zw(1," Generating\u2026 "));}function O(e,d){e&1&&(rg(0,"i",16),zw(1,"Download PDF "));}function w(e,d){if(e&1&&(zu(0,"section",14),rg(1,"i",17),zu(2,"div",18)(3,"h4",19),zw(4,"Download failed"),Wu(),zu(5,"p",20),zw(6),Wu()()()),e&2){let r=gw();cE(6),_g(r.errorMessage());}}var J=(()=>{class e{reportingService=I(x$1);running=Ti(null);errorMessage=Ti("");download(r){this.errorMessage.set(""),this.running.set(r);let l=r==="full"?"Get_Invoices_LastMonth":"Get_Invoices_LastMonthSummariesOnly",i=r==="full"?"TSIC-Last-Month-Invoices":"TSIC-Last-Month-Invoice-Summaries";this.reportingService.downloadReport(l).subscribe({next:c=>{this.reportingService.triggerDownload(c,i),this.running.set(null);},error:c=>{this.running.set(null),c.status===401?this.errorMessage.set("You must be logged in to run this report."):c.status===403?this.errorMessage.set("You do not have permission to run this report."):this.errorMessage.set("Report failed to generate. Please try again.");}});}static \u0275fac=function(l){return new(l||e)};static \u0275cmp=sC({type:e,selectors:[["app-produce-job-invoices"]],decls:33,vars:5,consts:[[1,"accounting-page"],[1,"page-header"],[1,"page-title"],[1,"bi","bi-file-earmark-ruled","page-title-icon"],[1,"page-subtitle"],[1,"action-panel"],["aria-hidden","true",1,"action-panel__icon"],[1,"bi","bi-file-earmark-pdf"],[1,"action-panel__body"],[1,"action-panel__title"],[1,"action-panel__desc"],[1,"action-panel__cta"],["type","button",1,"btn","btn-primary","btn-lg",3,"click","disabled"],[1,"bi","bi-file-earmark-text"],["role","alert",1,"result-panel","result-panel--danger"],["role","status","aria-hidden","true",1,"spinner-border","spinner-border-sm","me-2"],[1,"bi","bi-download","me-1"],["aria-hidden","true",1,"bi","bi-exclamation-triangle-fill","result-panel__icon"],[1,"result-panel__body"],[1,"result-panel__title"],[1,"result-panel__desc"]],template:function(l,i){l&1&&(zu(0,"div",0)(1,"div",1)(2,"div")(3,"h2",2),rg(4,"i",3),zw(5," Last Month Job Invoices "),Wu(),zu(6,"p",4),zw(7," Downloads last month's customer invoices as PDF. Use these for the beginning-of-month reconciliation. "),Wu()()(),zu(8,"section",5)(9,"div",6),rg(10,"i",7),Wu(),zu(11,"div",8)(12,"h3",9),zw(13,"Full invoices"),Wu(),zu(14,"p",10),zw(15," One row per invoice line item across every billable job for the prior month. "),Wu()(),zu(16,"div",11)(17,"button",12),ug("click",function(){return i.download("full")}),JC(18,P,2,0)(19,x,2,0),Wu()()(),zu(20,"section",5)(21,"div",6),rg(22,"i",13),Wu(),zu(23,"div",8)(24,"h3",9),zw(25,"Summaries only"),Wu(),zu(26,"p",10),zw(27," One row per job \u2014 totals only, no line-item detail. Faster to scan during reconciliation. "),Wu()(),zu(28,"div",11)(29,"button",12),ug("click",function(){return i.download("summaries")}),JC(30,E,2,0)(31,O,2,0),Wu()()(),JC(32,w,7,1,"section",14),Wu()),l&2&&(cE(17),sg("disabled",i.running()!==null),cE(),XC(i.running()==="full"?18:19),cE(11),sg("disabled",i.running()!==null),cE(),XC(i.running()==="summaries"?30:31),cE(2),XC(i.errorMessage()?32:-1));},dependencies:[A_],styles:['.accounting-page[_ngcontent-%COMP%]{max-width:880px;margin:0 auto;padding:var(--space-6) var(--space-4)}.page-header[_ngcontent-%COMP%]{margin-bottom:var(--space-5)}.action-panel[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:var(--space-4);background:linear-gradient(180deg,color-mix(in srgb,var(--bs-primary) 4%,var(--brand-surface)) 0%,var(--brand-surface) 100%);border:1px solid var(--border-color);border-left:3px solid var(--bs-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:var(--space-5) var(--space-5);transition:box-shadow .15s ease,transform .15s ease}.action-panel[_ngcontent-%COMP%] + .action-panel[_ngcontent-%COMP%]{margin-top:var(--space-3)}.action-panel__icon[_ngcontent-%COMP%]{width:3rem;height:3rem;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);background:color-mix(in srgb,var(--bs-primary) 12%,transparent);color:var(--bs-primary);font-size:1.5rem;flex-shrink:0}.action-panel__title[_ngcontent-%COMP%]{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--brand-text);margin:0 0 var(--space-1);line-height:1.2}.action-panel__desc[_ngcontent-%COMP%]{font-size:var(--font-size-sm);color:var(--brand-text-muted);margin:0;line-height:1.5}.action-panel__cta[_ngcontent-%COMP%]{flex-shrink:0}.action-panel__cta[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{white-space:nowrap}.action-panel__cta[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]:focus-visible{outline:none;box-shadow:var(--shadow-focus)}@media(max-width:640px){.action-panel[_ngcontent-%COMP%]{grid-template-columns:auto 1fr;grid-template-areas:"icon body" "cta cta";row-gap:var(--space-3)}.action-panel__icon[_ngcontent-%COMP%]{grid-area:icon}.action-panel__body[_ngcontent-%COMP%]{grid-area:body}.action-panel__cta[_ngcontent-%COMP%]{grid-area:cta}.action-panel__cta[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{width:100%}}.result-panel[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:var(--space-3);margin-top:var(--space-4);padding:var(--space-4) var(--space-5);border-radius:var(--radius-lg);border:1px solid transparent;box-shadow:var(--shadow-sm)}.result-panel__icon[_ngcontent-%COMP%]{font-size:1.5rem;line-height:1;flex-shrink:0;margin-top:.125rem}.result-panel__title[_ngcontent-%COMP%]{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);margin:0 0 var(--space-1)}.result-panel__desc[_ngcontent-%COMP%]{font-size:var(--font-size-sm);margin:0;line-height:1.5}.result-panel--success[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--bs-success) 8%,var(--brand-surface));border-color:color-mix(in srgb,var(--bs-success) 35%,transparent);border-left:3px solid var(--bs-success)}.result-panel--success[_ngcontent-%COMP%] .result-panel__icon[_ngcontent-%COMP%]{color:var(--bs-success)}.result-panel--success[_ngcontent-%COMP%] .result-panel__title[_ngcontent-%COMP%]{color:color-mix(in srgb,var(--bs-success) 80%,var(--brand-text))}.result-panel--success[_ngcontent-%COMP%] .result-panel__desc[_ngcontent-%COMP%]{color:var(--brand-text)}.result-panel--danger[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--bs-danger) 8%,var(--brand-surface));border-color:color-mix(in srgb,var(--bs-danger) 35%,transparent);border-left:3px solid var(--bs-danger)}.result-panel--danger[_ngcontent-%COMP%] .result-panel__icon[_ngcontent-%COMP%]{color:var(--bs-danger)}.result-panel--danger[_ngcontent-%COMP%] .result-panel__title[_ngcontent-%COMP%]{color:color-mix(in srgb,var(--bs-danger) 80%,var(--brand-text))}.result-panel--danger[_ngcontent-%COMP%] .result-panel__desc[_ngcontent-%COMP%]{color:var(--brand-text)}@media(prefers-reduced-motion:reduce){.action-panel[_ngcontent-%COMP%]{transition:none}}']})}return e})();export{J as ProduceJobInvoicesComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.