techlify-inventory-common 18.49.0 → 18.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm2022/lib/inventory-common/location/location-form/location-form.component.mjs +3 -3
  2. package/esm2022/lib/inventory-common/location/location.service.mjs +3 -3
  3. package/esm2022/lib/inventory-common/location/shelf/shelf-form/shelf-form.component.mjs +3 -3
  4. package/esm2022/lib/inventory-common/reports/stock-issue-summary-report/stock-issue-summary-report.component.mjs +3 -3
  5. package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs +10 -6
  6. package/esm2022/lib/inventory-common/stock-issue/stock-issue-list/stock-issue-list.component.mjs +4 -4
  7. package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.mjs +3 -3
  8. package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-view/stock-issue-product-view.component.mjs +3 -3
  9. package/esm2022/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.mjs +11 -7
  10. package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +5 -5
  11. package/esm2022/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.mjs +3 -3
  12. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.mjs +8 -6
  13. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +3 -3
  14. package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-single-product-form/stock-receipt-simple-form/stock-receipt-single-product-form.component.mjs +4 -6
  15. package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.mjs +3 -3
  16. package/fesm2022/{techlify-inventory-common-category.module-BBpgG9L3.mjs → techlify-inventory-common-category.module-oi41ku5U.mjs} +2 -2
  17. package/fesm2022/{techlify-inventory-common-category.module-BBpgG9L3.mjs.map → techlify-inventory-common-category.module-oi41ku5U.mjs.map} +1 -1
  18. package/fesm2022/{techlify-inventory-common-purchase-order-view.component-6qbMJdAs.mjs → techlify-inventory-common-purchase-order-view.component-DkWmMRaW.mjs} +2 -2
  19. package/fesm2022/{techlify-inventory-common-purchase-order-view.component-6qbMJdAs.mjs.map → techlify-inventory-common-purchase-order-view.component-DkWmMRaW.mjs.map} +1 -1
  20. package/fesm2022/{techlify-inventory-common-recipient.module-DsYw54Uj.mjs → techlify-inventory-common-recipient.module-v77bDJCC.mjs} +2 -2
  21. package/fesm2022/{techlify-inventory-common-recipient.module-DsYw54Uj.mjs.map → techlify-inventory-common-recipient.module-v77bDJCC.mjs.map} +1 -1
  22. package/fesm2022/techlify-inventory-common-stock-issue-form.component-ABIh_GkN.mjs +199 -0
  23. package/fesm2022/techlify-inventory-common-stock-issue-form.component-ABIh_GkN.mjs.map +1 -0
  24. package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-b_8gpI7x.mjs → techlify-inventory-common-stock-issue-product-view.component-3FB_GfyZ.mjs} +4 -4
  25. package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-b_8gpI7x.mjs.map → techlify-inventory-common-stock-issue-product-view.component-3FB_GfyZ.mjs.map} +1 -1
  26. package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BDOR4X49.mjs → techlify-inventory-common-stock-issue-view.component-D4AloV4G.mjs} +4 -4
  27. package/fesm2022/techlify-inventory-common-stock-issue-view.component-D4AloV4G.mjs.map +1 -0
  28. package/fesm2022/{techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs → techlify-inventory-common-techlify-inventory-common-B_42CQL_.mjs} +91 -233
  29. package/fesm2022/techlify-inventory-common-techlify-inventory-common-B_42CQL_.mjs.map +1 -0
  30. package/fesm2022/techlify-inventory-common.mjs +1 -1
  31. package/lib/inventory-common/location/location.service.d.ts +1 -1
  32. package/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.d.ts +1 -0
  33. package/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.d.ts +2 -1
  34. package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts +1 -0
  35. package/package.json +1 -1
  36. package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs +0 -161
  37. package/fesm2022/techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs +0 -194
  38. package/fesm2022/techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs.map +0 -1
  39. package/fesm2022/techlify-inventory-common-stock-issue-view.component-BDOR4X49.mjs.map +0 -1
  40. package/fesm2022/techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs.map +0 -1
  41. package/lib/inventory-common/location/location-selector/location-selector.component.d.ts +0 -46
@@ -1,2 +1,2 @@
1
- export { a9 as ExportToExcelButtonComponent, a3 as IncidentFormButtonComponent, a2 as IncidentFormComponent, a1 as IncidentListComponent, $ as IncidentModule, a0 as IncidentService, f as InventoryCommonModule, I as InventoryCommonRoutingModule, ad as LocationFormButtonComponent, ac as LocationFormComponent, ab as LocationListComponent, aa as LocationModule, L as LocationService, R as MeasureModule, U as MeasureService, _ as PayeeSelectorComponent, Z as PayeeSelectorModule, j as ProductBasicInfoComponent, r as ProductBatchUpdateFormComponent, k as ProductFormButtonComponent, i as ProductFormComponent, q as ProductFormService, s as ProductImportPageComponent, o as ProductListComponent, h as ProductModule, l as ProductQuickSearchComponent, n as ProductSearchComponent, m as ProductSearchModule, p as ProductService, t as ProductViewPageComponent, a8 as RatingFormButtonComponent, a7 as RatingFormComponent, a6 as RatingListComponent, a4 as RatingModule, a5 as RatingService, ai as ShelfFormButtonComponent, ah as ShelfFormComponent, ag as ShelfListComponent, ae as ShelfModule, af as ShelfService, y as StockIssueListComponent, u as StockIssueModule, v as StockIssuePageComponent, w as StockIssuePageModule, B as StockIssueProductFormButtonComponent, A as StockIssueProductFormComponent, z as StockIssueProductListComponent, d as StockIssueProductService, x as StockIssueSingleProductFormComponent, E as StockReceiptListComponent, D as StockReceiptPageComponent, K as StockReceiptProductFormButtonComponent, J as StockReceiptProductFormComponent, F as StockReceiptProductsListComponent, G as StockReceiptSingleProductFormComponent, H as StockReceiptViewComponent, C as StockReceiptsModule, g as StockSummaryService, O as StockTransferFormComponent, N as StockTransferListComponent, Q as StockTransferService, W as SupplierFormComponent, X as SupplierListComponent, V as SupplierModule, Y as SupplierTypeService, T as TechlifyFilterComponent, a as TechlifyFilterModule } from './techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs';
1
+ export { a8 as ExportToExcelButtonComponent, a2 as IncidentFormButtonComponent, a1 as IncidentFormComponent, a0 as IncidentListComponent, _ as IncidentModule, $ as IncidentService, e as InventoryCommonModule, I as InventoryCommonRoutingModule, ac as LocationFormButtonComponent, ab as LocationFormComponent, aa as LocationListComponent, a9 as LocationModule, L as LocationService, Q as MeasureModule, R as MeasureService, Z as PayeeSelectorComponent, Y as PayeeSelectorModule, i as ProductBasicInfoComponent, q as ProductBatchUpdateFormComponent, j as ProductFormButtonComponent, h as ProductFormComponent, p as ProductFormService, r as ProductImportPageComponent, n as ProductListComponent, g as ProductModule, k as ProductQuickSearchComponent, m as ProductSearchComponent, l as ProductSearchModule, o as ProductService, s as ProductViewPageComponent, a7 as RatingFormButtonComponent, a6 as RatingFormComponent, a5 as RatingListComponent, a3 as RatingModule, a4 as RatingService, ah as ShelfFormButtonComponent, ag as ShelfFormComponent, af as ShelfListComponent, ad as ShelfModule, ae as ShelfService, x as StockIssueListComponent, t as StockIssueModule, u as StockIssuePageComponent, v as StockIssuePageModule, A as StockIssueProductFormButtonComponent, z as StockIssueProductFormComponent, y as StockIssueProductListComponent, c as StockIssueProductService, w as StockIssueSingleProductFormComponent, D as StockReceiptListComponent, C as StockReceiptPageComponent, J as StockReceiptProductFormButtonComponent, H as StockReceiptProductFormComponent, E as StockReceiptProductsListComponent, F as StockReceiptSingleProductFormComponent, G as StockReceiptViewComponent, B as StockReceiptsModule, f as StockSummaryService, N as StockTransferFormComponent, K as StockTransferListComponent, O as StockTransferService, V as SupplierFormComponent, W as SupplierListComponent, U as SupplierModule, X as SupplierTypeService, T as TechlifyFilterComponent, a as TechlifyFilterModule } from './techlify-inventory-common-techlify-inventory-common-B_42CQL_.mjs';
2
2
  //# sourceMappingURL=techlify-inventory-common.mjs.map
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export declare class LocationService extends TechlifyService {
5
5
  httpService: HttpService;
6
6
  constructor(httpService: HttpService);
7
- count(): Observable<number>;
7
+ count(params?: any): Observable<number>;
8
8
  /**
9
9
  * @todo remove this function from here
10
10
  */
@@ -25,6 +25,7 @@ export declare class StockIssueFormComponent extends TechlifyFormComponent imple
25
25
  ngOnInit(): void;
26
26
  private loadStockIssue;
27
27
  get stockIssueProducts(): FormArray;
28
+ getSelectedLocation(index: number): any;
28
29
  createStockIssueProduct(): import("@angular/forms").FormGroup<{
29
30
  id: import("@angular/forms").FormControl<string | null>;
30
31
  product_id: import("@angular/forms").FormControl<string | null>;
@@ -29,7 +29,8 @@ export declare class StockIssueProductListComponent extends TechlifyListComponen
29
29
  columnConfig: ColumnConfig[];
30
30
  get displayedColumns(): string[];
31
31
  get totalQuantity(): number;
32
- get grandTotal(): number;
32
+ get grandTotalAvco(): number;
33
+ get grandTotalFifoValue(): number;
33
34
  get footerColumns(): string[];
34
35
  constructor(service: StockIssueProductService, formBuilder: FormBuilder, featureService: TechlifyFeatureService, datePipe: DatePipe);
35
36
  ngOnInit(): void;
@@ -31,6 +31,7 @@ export declare class StockReceiptFormComponent extends TechlifyFormComponent imp
31
31
  particulars: import("@angular/forms").FormControl<string | null>;
32
32
  }>;
33
33
  getSelectedProduct(index: number): any;
34
+ getSelectedLocation(index: number): any;
34
35
  addStockReceiptProduct(): void;
35
36
  removeStockReceiptProduct(index: number): void;
36
37
  clearProducts(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "techlify-inventory-common",
3
- "version": "18.49.0",
3
+ "version": "18.51.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.13",
6
6
  "@angular/core": "^18.2.13"
@@ -1,161 +0,0 @@
1
- import { Component, forwardRef, input, signal } from '@angular/core';
2
- import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
3
- import { CommonModule } from '@angular/common';
4
- import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
5
- import { MaterialModule } from '../../material.module';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../location.service";
8
- import * as i2 from "ngx-techlify-core";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/material/core";
11
- import * as i5 from "@angular/material/form-field";
12
- import * as i6 from "@angular/material/select";
13
- import * as i7 from "@angular/forms";
14
- export class LocationSelectorComponent {
15
- locationService;
16
- featureService;
17
- appearance = input('outline');
18
- label = input('Location');
19
- placeholder = input('Select a location');
20
- hint = input();
21
- includeNone = input(true);
22
- isSubLocationEnabled = signal(false);
23
- locations = [];
24
- selectedValue = null;
25
- isDisabled = false;
26
- searchControl = new FormControl('');
27
- onChange = () => { };
28
- onTouched = () => { };
29
- constructor(locationService, featureService) {
30
- this.locationService = locationService;
31
- this.featureService = featureService;
32
- }
33
- ngOnInit() {
34
- this.isSubLocationEnabled.set(this.featureService.isFeatureExists('sub-locations'));
35
- this.loadData();
36
- this.setupSearch();
37
- }
38
- setupSearch() {
39
- this.searchControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe((value) => {
40
- this.loadData(value);
41
- });
42
- }
43
- loadData(search = null) {
44
- const params = {};
45
- if (search) {
46
- params.search = search;
47
- }
48
- this.locationService.index(params, true).subscribe({
49
- next: (response) => {
50
- const flatLocations = response.data;
51
- this.locations = this.isSubLocationEnabled()
52
- ? this.buildHierarchy(flatLocations)
53
- : flatLocations;
54
- }
55
- });
56
- }
57
- /**
58
- * To prevent recursive calls in the api while trying to get
59
- * parent and children of a location, i've opted to have the ui
60
- * build the hierarchy of locations
61
- */
62
- buildHierarchy(locations) {
63
- const locationMap = new Map();
64
- locations.forEach(location => locationMap.set(location.id, location));
65
- // Calculate depth for each location with cycle detection
66
- const getDepth = (location, visited = new Set()) => {
67
- if (!location.parent_id)
68
- return 0;
69
- if (visited.has(location.id))
70
- return 0; // Prevent infinite loop if parent is same as child
71
- visited.add(location.id); // Take note of visited locations
72
- const parent = locationMap.get(location.parent_id);
73
- if (!parent)
74
- return 0;
75
- return 1 + getDepth(parent, visited);
76
- };
77
- // Build hierarchical list with depths
78
- const withDepths = locations.map(location => ({
79
- id: location.id,
80
- title: location.title,
81
- parent_id: location.parent_id,
82
- depth: getDepth(location)
83
- }));
84
- // Sort: root items first, then recursively add children
85
- const result = [];
86
- const added = new Set(); // Prevent infinite loop on cycles
87
- // Find all "roots" - items with no parent, OR items whose parent is missing from the list
88
- const rootIds = withDepths
89
- .filter(location => !location.parent_id || !locationMap.has(location.parent_id))
90
- .map(location => location.id);
91
- const addWithChildren = (parentId, depth) => {
92
- // If parentId is null, we look for our identified roots.
93
- // Otherwise we look for children of the parentId.
94
- const itemsToAdd = parentId === null
95
- ? withDepths.filter(location => rootIds.includes(location.id))
96
- : withDepths.filter(location => location.parent_id === parentId);
97
- itemsToAdd
98
- .filter(location => !added.has(location.id))
99
- .sort((a, b) => a.title.localeCompare(b.title))
100
- .forEach(location => {
101
- added.add(location.id);
102
- result.push(location);
103
- addWithChildren(location.id, depth + 1);
104
- });
105
- };
106
- addWithChildren(null, 0);
107
- // If there are still items not added (due to circular references A->B->A), add them as roots
108
- if (added.size < withDepths.length) {
109
- withDepths
110
- .filter(location => !added.has(location.id))
111
- .sort((a, b) => a.title.localeCompare(b.title))
112
- .forEach(location => {
113
- added.add(location.id);
114
- result.push(location);
115
- // Try to add children for this "forced root" in case it has valid children
116
- addWithChildren(location.id, location.depth + 1);
117
- });
118
- }
119
- return result;
120
- }
121
- onSelectionChange(value) {
122
- this.selectedValue = value;
123
- this.onChange(value);
124
- this.onTouched();
125
- }
126
- writeValue(value) {
127
- this.selectedValue = value;
128
- }
129
- registerOnChange(fn) {
130
- this.onChange = fn;
131
- }
132
- registerOnTouched(fn) {
133
- this.onTouched = fn;
134
- }
135
- setDisabledState(isDisabled) {
136
- this.isDisabled = isDisabled;
137
- }
138
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocationSelectorComponent, deps: [{ token: i1.LocationService }, { token: i2.TechlifyFeatureService }], target: i0.ɵɵFactoryTarget.Component });
139
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LocationSelectorComponent, isStandalone: true, selector: "app-location-selector", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, includeNone: { classPropertyName: "includeNone", publicName: "includeNone", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
140
- {
141
- provide: NG_VALUE_ACCESSOR,
142
- useExisting: forwardRef(() => LocationSelectorComponent),
143
- multi: true
144
- }
145
- ], ngImport: i0, template: "<mat-form-field class=\"w-100\" [appearance]=\"appearance()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select [value]=\"selectedValue\" [disabled]=\"isDisabled\" [placeholder]=\"placeholder()\"\n panelClass=\"location-selector-panel\" (selectionChange)=\"onSelectionChange($event.value)\">\n\n <div class=\"sticky-search-container\">\n <input [formControl]=\"searchControl\" placeholder=\"Search...\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n\n <mat-option *ngIf=\"includeNone()\" [value]=\"null\">None</mat-option>\n\n <mat-option *ngFor=\"let location of locations\" [value]=\"location.id\">\n <span [ngStyle]=\"{'padding-left.px': location.depth * 16}\">\n <span *ngIf=\"location.depth > 0\">\u21B3 </span>{{ location.title }}\n </span>\n </mat-option>\n\n </mat-select>\n \n <mat-hint *ngIf=\"hint()\">\n {{ hint() }}\n </mat-hint>\n</mat-form-field>", styles: [".sticky-search-container{position:sticky;top:0;z-index:1000;background:#fff;border-bottom:1px solid rgba(0,0,0,.12);margin:0}.search-input{width:100%;padding:8px 16px;border:none;border-radius:4px;outline:none;font-size:14px;box-sizing:border-box}.search-input:focus{border-color:#00000061}::ng-deep .location-selector-panel{padding-top:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], preserveWhitespaces: true });
146
- }
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocationSelectorComponent, decorators: [{
148
- type: Component,
149
- args: [{ selector: 'app-location-selector', standalone: true, imports: [
150
- CommonModule,
151
- MaterialModule,
152
- ReactiveFormsModule
153
- ], providers: [
154
- {
155
- provide: NG_VALUE_ACCESSOR,
156
- useExisting: forwardRef(() => LocationSelectorComponent),
157
- multi: true
158
- }
159
- ], template: "<mat-form-field class=\"w-100\" [appearance]=\"appearance()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select [value]=\"selectedValue\" [disabled]=\"isDisabled\" [placeholder]=\"placeholder()\"\n panelClass=\"location-selector-panel\" (selectionChange)=\"onSelectionChange($event.value)\">\n\n <div class=\"sticky-search-container\">\n <input [formControl]=\"searchControl\" placeholder=\"Search...\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\">\n </div>\n\n <mat-option *ngIf=\"includeNone()\" [value]=\"null\">None</mat-option>\n\n <mat-option *ngFor=\"let location of locations\" [value]=\"location.id\">\n <span [ngStyle]=\"{'padding-left.px': location.depth * 16}\">\n <span *ngIf=\"location.depth > 0\">\u21B3 </span>{{ location.title }}\n </span>\n </mat-option>\n\n </mat-select>\n \n <mat-hint *ngIf=\"hint()\">\n {{ hint() }}\n </mat-hint>\n</mat-form-field>", styles: [".sticky-search-container{position:sticky;top:0;z-index:1000;background:#fff;border-bottom:1px solid rgba(0,0,0,.12);margin:0}.search-input{width:100%;padding:8px 16px;border:none;border-radius:4px;outline:none;font-size:14px;box-sizing:border-box}.search-input:focus{border-color:#00000061}::ng-deep .location-selector-panel{padding-top:0!important}\n"] }]
160
- }], ctorParameters: () => [{ type: i1.LocationService }, { type: i2.TechlifyFeatureService }] });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vbG9jYXRpb24vbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vbG9jYXRpb24vbG9jYXRpb24tc2VsZWN0b3IvbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUE4QnZELE1BQU0sT0FBTyx5QkFBeUI7SUFrQmhCO0lBQ1Y7SUFqQlYsVUFBVSxHQUFHLEtBQUssQ0FBeUIsU0FBUyxDQUFDLENBQUM7SUFDdEQsS0FBSyxHQUFHLEtBQUssQ0FBUyxVQUFVLENBQUMsQ0FBQztJQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFTLG1CQUFtQixDQUFDLENBQUM7SUFDakQsSUFBSSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3ZCLFdBQVcsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFFbkMsb0JB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bnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVjaGxpZnlGZWF0dXJlU2VydmljZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuaW50ZXJmYWNlIEhpZXJhcmNoaWNhbExvY2F0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgcGFyZW50X2lkOiBudW1iZXIgfCBudWxsO1xuICBkZXB0aDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9jYXRpb24tc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2F0aW9uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9jYXRpb24tc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhdGlvblNlbGVjdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExvY2F0aW9uU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcblxuICBhcHBlYXJhbmNlID0gaW5wdXQ8TWF0Rm9ybUZpZWxkQXBwZWFyYW5jZT4oJ291dGxpbmUnKTtcbiAgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdMb2NhdGlvbicpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oJ1NlbGVjdCBhIGxvY2F0aW9uJyk7XG4gIGhpbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGluY2x1ZGVOb25lID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgaXNTdWJMb2NhdGlvbkVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGxvY2F0aW9uczogSGllcmFyY2hpY2FsTG9jYXRpb25bXSA9IFtdO1xuICBzZWxlY3RlZFZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlciB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlOiBMb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZWF0dXJlU2VydmljZTogVGVjaGxpZnlGZWF0dXJlU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTdWJMb2NhdGlvbkVuYWJsZWQuc2V0KHRoaXMuZmVhdHVyZVNlcnZpY2UuaXNGZWF0dXJlRXhpc3RzKCdzdWItbG9jYXRpb25zJykpO1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIHRoaXMuc2V0dXBTZWFyY2goKTtcbiAgfVxuXG4gIHNldHVwU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg0MDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRGF0YShzZWFyY2g6IHN0cmluZyB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICBwYXJhbXMuc2VhcmNoID0gc2VhcmNoO1xuICAgIH1cblxuICAgIHRoaXMubG9jYXRpb25TZXJ2aWNlLmluZGV4KHBhcmFtcywgdHJ1ZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGZsYXRMb2NhdGlvbnMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHRoaXMuaXNTdWJMb2NhdGlvbkVuYWJsZWQoKVxuICAgICAgICAgID8gdGhpcy5idWlsZEhpZXJhcmNoeShmbGF0TG9jYXRpb25zKVxuICAgICAgICAgIDogZmxhdExvY2F0aW9ucztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBwcmV2ZW50IHJlY3Vyc2l2ZSBjYWxscyBpbiB0aGUgYXBpIHdoaWxlIHRyeWluZyB0byBnZXRcbiAgICogcGFyZW50IGFuZCBjaGlsZHJlbiBvZiBhIGxvY2F0aW9uLCBpJ3ZlIG9wdGVkIHRvIGhhdmUgdGhlIHVpIFxuICAgKiBidWlsZCB0aGUgaGllcmFyY2h5IG9mIGxvY2F0aW9ucyBcbiAgICovXG4gIHByaXZhdGUgYnVpbGRIaWVyYXJjaHkobG9jYXRpb25zOiBhbnlbXSk6IEhpZXJhcmNoaWNhbExvY2F0aW9uW10ge1xuICAgIGNvbnN0IGxvY2F0aW9uTWFwID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgICBsb2NhdGlvbnMuZm9yRWFjaChsb2NhdGlvbiA9PiBsb2NhdGlvbk1hcC5zZXQobG9jYXRpb24uaWQsIGxvY2F0aW9uKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZGVwdGggZm9yIGVhY2ggbG9jYXRpb24gd2l0aCBjeWNsZSBkZXRlY3Rpb25cbiAgICBjb25zdCBnZXREZXB0aCA9IChsb2NhdGlvbjogYW55LCB2aXNpdGVkOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKSk6IG51bWJlciA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9uLnBhcmVudF9pZCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmlzaXRlZC5oYXMobG9jYXRpb24uaWQpKSByZXR1cm4gMDsgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGlmIHBhcmVudCBpcyBzYW1lIGFzIGNoaWxkXG4gICAgICB2aXNpdGVkLmFkZChsb2NhdGlvbi5pZCk7IC8vIFRha2Ugbm90ZSBvZiB2aXNpdGVkIGxvY2F0aW9uc1xuXG4gICAgICBjb25zdCBwYXJlbnQgPSBsb2NhdGlvbk1hcC5nZXQobG9jYXRpb24ucGFyZW50X2lkKTtcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm4gMDtcblxuICAgICAgcmV0dXJuIDEgKyBnZXREZXB0aChwYXJlbnQsIHZpc2l0ZWQpO1xuICAgIH07XG5cbiAgICAvLyBCdWlsZCBoaWVyYXJjaGljYWwgbGlzdCB3aXRoIGRlcHRoc1xuICAgIGNvbnN0IHdpdGhEZXB0aHM6IEhpZXJhcmNoaWNhbExvY2F0aW9uW10gPSBsb2NhdGlvbnMubWFwKGxvY2F0aW9uID0+ICh7XG4gICAgICBpZDogbG9jYXRpb24uaWQsXG4gICAgICB0aXRsZTogbG9jYXRpb24udGl0bGUsXG4gICAgICBwYXJlbnRfaWQ6IGxvY2F0aW9uLnBhcmVudF9pZCxcbiAgICAgIGRlcHRoOiBnZXREZXB0aChsb2NhdGlvbilcbiAgICB9KSk7XG5cbiAgICAvLyBTb3J0OiByb290IGl0ZW1zIGZpcnN0LCB0aGVuIHJlY3Vyc2l2ZWx5IGFkZCBjaGlsZHJlblxuICAgIGNvbnN0IHJlc3VsdDogSGllcmFyY2hpY2FsTG9jYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGFkZGVkID0gbmV3IFNldDxudW1iZXI+KCk7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBjeWNsZXNcblxuICAgIC8vIEZpbmQgYWxsIFwicm9vdHNcIiAtIGl0ZW1zIHdpdGggbm8gcGFyZW50LCBPUiBpdGVtcyB3aG9zZSBwYXJlbnQgaXMgbWlzc2luZyBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3Qgcm9vdElkcyA9IHdpdGhEZXB0aHNcbiAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWxvY2F0aW9uLnBhcmVudF9pZCB8fCAhbG9jYXRpb25NYXAuaGFzKGxvY2F0aW9uLnBhcmVudF9pZCkpXG4gICAgICAubWFwKGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkKTtcblxuICAgIGNvbnN0IGFkZFdpdGhDaGlsZHJlbiA9IChwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCwgZGVwdGg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gSWYgcGFyZW50SWQgaXMgbnVsbCwgd2UgbG9vayBmb3Igb3VyIGlkZW50aWZpZWQgcm9vdHMuIFxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIGxvb2sgZm9yIGNoaWxkcmVuIG9mIHRoZSBwYXJlbnRJZC5cbiAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBwYXJlbnRJZCA9PT0gbnVsbFxuICAgICAgICA/IHdpdGhEZXB0aHMuZmlsdGVyKGxvY2F0aW9uID0+IHJvb3RJZHMuaW5jbHVkZXMobG9jYXRpb24uaWQpKVxuICAgICAgICA6IHdpdGhEZXB0aHMuZmlsdGVyKGxvY2F0aW9uID0+IGxvY2F0aW9uLnBhcmVudF9pZCA9PT0gcGFyZW50SWQpO1xuXG4gICAgICBpdGVtc1RvQWRkXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWFkZGVkLmhhcyhsb2NhdGlvbi5pZCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpXG4gICAgICAgIC5mb3JFYWNoKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICBhZGRlZC5hZGQobG9jYXRpb24uaWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICBhZGRXaXRoQ2hpbGRyZW4obG9jYXRpb24uaWQsIGRlcHRoICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhZGRXaXRoQ2hpbGRyZW4obnVsbCwgMCk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgc3RpbGwgaXRlbXMgbm90IGFkZGVkIChkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlcyBBLT5CLT5BKSwgYWRkIHRoZW0gYXMgcm9vdHNcbiAgICBpZiAoYWRkZWQuc2l6ZSA8IHdpdGhEZXB0aHMubGVuZ3RoKSB7XG4gICAgICB3aXRoRGVwdGhzXG4gICAgICAgIC5maWx0ZXIobG9jYXRpb24gPT4gIWFkZGVkLmhhcyhsb2NhdGlvbi5pZCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpdGxlLmxvY2FsZUNvbXBhcmUoYi50aXRsZSkpXG4gICAgICAgIC5mb3JFYWNoKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICAgYWRkZWQuYWRkKGxvY2F0aW9uLmlkKTtcbiAgICAgICAgICAgcmVzdWx0LnB1c2gobG9jYXRpb24pO1xuICAgICAgICAgICAvLyBUcnkgdG8gYWRkIGNoaWxkcmVuIGZvciB0aGlzIFwiZm9yY2VkIHJvb3RcIiBpbiBjYXNlIGl0IGhhcyB2YWxpZCBjaGlsZHJlblxuICAgICAgICAgICBhZGRXaXRoQ2hpbGRyZW4obG9jYXRpb24uaWQsIGxvY2F0aW9uLmRlcHRoICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiPlxuICA8bWF0LWxhYmVsPnt7IGxhYmVsKCkgfX08L21hdC1sYWJlbD5cbiAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcbiAgICBwYW5lbENsYXNzPVwibG9jYXRpb24tc2VsZWN0b3ItcGFuZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktc2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1vcHRpb24gKm5nSWY9XCJpbmNsdWRlTm9uZSgpXCIgW3ZhbHVlXT1cIm51bGxcIj5Ob25lPC9tYXQtb3B0aW9uPlxuXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9uc1wiIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxuICAgICAgPHNwYW4gW25nU3R5bGVdPVwieydwYWRkaW5nLWxlZnQucHgnOiBsb2NhdGlvbi5kZXB0aCAqIDE2fVwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvY2F0aW9uLmRlcHRoID4gMFwiPuKGsyA8L3NwYW4+e3sgbG9jYXRpb24udGl0bGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L21hdC1vcHRpb24+XG5cbiAgPC9tYXQtc2VsZWN0PlxuICBcbiAgPG1hdC1oaW50ICpuZ0lmPVwiaGludCgpXCI+XG4gICAge3sgaGludCgpIH19XG4gIDwvbWF0LWhpbnQ+XG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
@@ -1,194 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, Component } from '@angular/core';
3
- import * as i2 from '@angular/forms';
4
- import { Validators } from '@angular/forms';
5
- import * as i1 from 'ngx-techlify-core';
6
- import { TechlifyFormComponent, FormConfigurationUtilityService } from 'ngx-techlify-core';
7
- import { b as StockIssueService, L as LocationService, S as SharedModule, c as LocationSelectorComponent } from './techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs';
8
- import moment from 'moment';
9
- import * as i1$1 from '@angular/router';
10
- import * as i3 from '@angular/common';
11
- import * as i6 from '@angular/material/button';
12
- import * as i4 from '@angular/material/card';
13
- import * as i9 from '@angular/material/datepicker';
14
- import * as i8 from '@angular/material/form-field';
15
- import * as i11 from '@angular/material/icon';
16
- import * as i9$1 from '@angular/material/input';
17
- import * as i13 from '@angular/material/tooltip';
18
-
19
- class StockIssueFormComponent extends TechlifyFormComponent {
20
- formValidatorService;
21
- fb;
22
- stockIssueService;
23
- route;
24
- locationService;
25
- location;
26
- formConfigService;
27
- locationCount = signal(0);
28
- stockIssue = signal(null);
29
- issuableData = signal(null);
30
- formConfigurationUtilityService;
31
- constructor(formValidatorService, fb, stockIssueService, route, locationService, location, formConfigService) {
32
- super(formValidatorService);
33
- this.formValidatorService = formValidatorService;
34
- this.fb = fb;
35
- this.stockIssueService = stockIssueService;
36
- this.route = route;
37
- this.locationService = locationService;
38
- this.location = location;
39
- this.formConfigService = formConfigService;
40
- this.formConfigurationUtilityService = new FormConfigurationUtilityService();
41
- this.errorMessages = {
42
- date: {
43
- required: 'The date field is required.',
44
- },
45
- recipient_id: {
46
- required: 'Please select a recipient.',
47
- },
48
- };
49
- this.form = this.fb.group({
50
- date: [new Date(), Validators.compose([Validators.required])],
51
- particulars: [''],
52
- recipient_id: [''],
53
- stock_issue_products: this.fb.array([])
54
- });
55
- }
56
- ngOnInit() {
57
- this.locationService.count().subscribe((count) => {
58
- this.locationCount.set(count);
59
- });
60
- this.formConfigurationUtilityService.initialize(this.formConfigService, 'stock-issue').subscribe({
61
- next: () => {
62
- this.form.get('recipient_id')?.setValidators(this.formConfigurationUtilityService.getFieldRequired('recipient_id') ? Validators.required : null);
63
- this.form.get('recipient_id')?.updateValueAndValidity();
64
- }
65
- });
66
- const id = this.route.snapshot.paramMap.get('id');
67
- if (id) {
68
- this.loadStockIssue(+id);
69
- }
70
- else {
71
- this.addStockIssueProduct();
72
- }
73
- this.route.queryParams.subscribe({
74
- next: (params) => {
75
- this.issuableData.set({
76
- issuable_type: params['issuable_type'],
77
- issuable_id: params['issuable_id']
78
- });
79
- }
80
- });
81
- }
82
- loadStockIssue(id) {
83
- this.isWorking = true;
84
- this.stockIssueService.show(id, { with: 'stockIssueProducts.product' }).subscribe({
85
- next: (response) => {
86
- this.isWorking = false;
87
- this.stockIssue.set(response.item);
88
- },
89
- error: () => {
90
- this.isWorking = false;
91
- },
92
- complete: () => {
93
- const issue = this.stockIssue();
94
- this.form.patchValue({
95
- date: issue.date ? new Date(issue.date) : new Date(),
96
- particulars: issue.details,
97
- recipient_id: issue.recipient_id,
98
- });
99
- this.stockIssueProducts.clear();
100
- issue.stock_issue_products?.forEach((sip) => {
101
- const group = this.createStockIssueProduct();
102
- group.patchValue({
103
- id: sip.id,
104
- product_id: sip.product_id,
105
- location_from_id: sip.location_from_id,
106
- quantity: sip.quantity,
107
- particulars: sip.particulars,
108
- });
109
- this.stockIssueProducts.push(group);
110
- });
111
- }
112
- });
113
- }
114
- get stockIssueProducts() {
115
- return this.form.get('stock_issue_products');
116
- }
117
- createStockIssueProduct() {
118
- return this.fb.group({
119
- id: [''],
120
- product_id: ['', Validators.required],
121
- location_from_id: ['', this.locationCount() > 0 ? Validators.required : null],
122
- quantity: [0, [Validators.required, Validators.min(0)]],
123
- particulars: [''],
124
- issuable_id: [this.issuableData()?.issuable_id ?? ''],
125
- issuable_type: [this.issuableData()?.issuable_type ?? '']
126
- });
127
- }
128
- addStockIssueProduct() {
129
- this.stockIssueProducts.push(this.createStockIssueProduct());
130
- }
131
- removeStockIssueProduct(index) {
132
- this.stockIssueProducts.removeAt(index);
133
- }
134
- clearProducts() {
135
- this.stockIssueProducts.clear();
136
- }
137
- save() {
138
- if (this.form.invalid) {
139
- this.form.markAllAsTouched();
140
- this.form.markAsDirty();
141
- this.alertService.addAlert('Please check the form for errors.', 'error');
142
- return;
143
- }
144
- if (this.stockIssueProducts.length === 0) {
145
- this.alertService.addAlert('Please add at least one product.', 'error');
146
- return;
147
- }
148
- const formData = this.form.getRawValue();
149
- const data = {
150
- id: this.stockIssue()?.id ?? null,
151
- date: moment(formData.date).format('YYYY-MM-DD'),
152
- details: formData.particulars,
153
- recipient_id: formData.recipient_id || null,
154
- products: formData.stock_issue_products.map((row) => ({
155
- id: row.product_id,
156
- product_id: row.product_id,
157
- quantity: row.quantity,
158
- location_from_id: row.location_from_id,
159
- particulars: row.particulars,
160
- issuable_id: row.issuable_id,
161
- issuable_type: row.issuable_type
162
- }))
163
- };
164
- this.isWorking = true;
165
- const request$ = this.stockIssue()?.id
166
- ? this.stockIssueService.update(data)
167
- : this.stockIssueService.store(data);
168
- request$.subscribe({
169
- next: () => {
170
- this.isWorking = false;
171
- this.alertService.addAlert('Stock issues saved successfully!', 'success');
172
- this.location.back();
173
- },
174
- error: () => {
175
- this.isWorking = false;
176
- }
177
- });
178
- }
179
- cancel() {
180
- this.location.back();
181
- }
182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.FormBuilder }, { token: StockIssueService }, { token: i1$1.ActivatedRoute }, { token: LocationService }, { token: i3.Location }, { token: i1.FormConfigurationFormService }], target: i0.ɵɵFactoryTarget.Component });
183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StockIssueFormComponent, isStandalone: true, selector: "app-stock-issue-form", usesInheritance: true, ngImport: i0, template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline' label=\"Location From\"\n hint=\"Which warehouse are we taking stock from?\"\n formControlName=\"location_from_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>", dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.FormConfigurationForFormComponent, selector: "app-form-configuration-for-form", inputs: ["formCode"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i1.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "isEmitInitialEvent", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange", "isItemsEmpty"] }, { kind: "component", type: i1.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "component", type: LocationSelectorComponent, selector: "app-location-selector", inputs: ["appearance", "label", "placeholder", "hint", "includeNone"] }], preserveWhitespaces: true });
184
- }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StockIssueFormComponent, decorators: [{
186
- type: Component,
187
- args: [{ selector: 'app-stock-issue-form', standalone: true, imports: [
188
- SharedModule,
189
- LocationSelectorComponent,
190
- ], template: "<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline' label=\"Location From\"\n hint=\"Which warehouse are we taking stock from?\"\n formControlName=\"location_from_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>" }]
191
- }], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.FormBuilder }, { type: StockIssueService }, { type: i1$1.ActivatedRoute }, { type: LocationService }, { type: i3.Location }, { type: i1.FormConfigurationFormService }] });
192
-
193
- export { StockIssueFormComponent };
194
- //# sourceMappingURL=techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs","sources":["../../../projects/inventory-common/src/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.html"],"sourcesContent":["import { Component, OnInit, signal } from \"@angular/core\";\nimport { FormArray, FormBuilder, Validators } from '@angular/forms';\nimport {\n FormConfigurationFormService,\n FormConfigurationUtilityService,\n FormValidatorService,\n TechlifyFormComponent\n} from \"ngx-techlify-core\";\nimport { Location } from '@angular/common';\nimport { LocationSelectorComponent } from '../../location/location-selector/location-selector.component';\nimport { StockIssueService } from '../stock-issue.service';\nimport { ActivatedRoute } from '@angular/router';\nimport moment from 'moment';\nimport { LocationService } from '../../location/location.service';\nimport { SharedModule } from \"../../shared.module\";\n\n@Component({\n selector: 'app-stock-issue-form',\n templateUrl: './stock-issue-form.component.html',\n standalone: true,\n imports: [\n SharedModule,\n LocationSelectorComponent,\n ]\n})\n\nexport class StockIssueFormComponent extends TechlifyFormComponent implements OnInit {\n\n locationCount = signal<number>(0);\n stockIssue = signal<any>(null);\n\n issuableData = signal<{\n issuable_type: String,\n issuable_id: number\n } | null>(null)\n\n public formConfigurationUtilityService: FormConfigurationUtilityService;\n\n constructor(protected override formValidatorService: FormValidatorService,\n private fb: FormBuilder,\n private stockIssueService: StockIssueService,\n private route: ActivatedRoute,\n private locationService: LocationService,\n private location: Location,\n private formConfigService: FormConfigurationFormService\n ) {\n super(formValidatorService);\n\n this.formConfigurationUtilityService = new FormConfigurationUtilityService();\n\n this.errorMessages = {\n date: {\n required: 'The date field is required.',\n },\n recipient_id: {\n required: 'Please select a recipient.',\n },\n };\n\n this.form = this.fb.group({\n date: [new Date(), Validators.compose([Validators.required])],\n particulars: [''],\n recipient_id: [''],\n stock_issue_products: this.fb.array([])\n });\n }\n\n ngOnInit(): void {\n this.locationService.count().subscribe((count: number) => {\n this.locationCount.set(count);\n });\n\n this.formConfigurationUtilityService.initialize(this.formConfigService, 'stock-issue').subscribe({\n next: () => {\n this.form.get('recipient_id')?.setValidators(\n this.formConfigurationUtilityService.getFieldRequired('recipient_id') ? Validators.required : null\n );\n this.form.get('recipient_id')?.updateValueAndValidity();\n }\n });\n\n const id = this.route.snapshot.paramMap.get('id');\n if (id) {\n this.loadStockIssue(+id);\n } else {\n this.addStockIssueProduct();\n }\n\n this.route.queryParams.subscribe({\n next: (params: any) => {\n this.issuableData.set({\n issuable_type: params['issuable_type'],\n issuable_id: params['issuable_id']\n });\n\n }\n })\n }\n\n private loadStockIssue(id: number): void {\n this.isWorking = true;\n this.stockIssueService.show(id, { with: 'stockIssueProducts.product' }).subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.stockIssue.set(response.item);\n },\n error: () => {\n this.isWorking = false;\n },\n complete: () => {\n const issue = this.stockIssue();\n this.form.patchValue({\n date: issue.date ? new Date(issue.date) : new Date(),\n particulars: issue.details,\n recipient_id: issue.recipient_id,\n });\n\n this.stockIssueProducts.clear();\n issue.stock_issue_products?.forEach((sip: any) => {\n const group = this.createStockIssueProduct();\n group.patchValue({\n id: sip.id,\n product_id: sip.product_id,\n location_from_id: sip.location_from_id,\n quantity: sip.quantity,\n particulars: sip.particulars,\n });\n this.stockIssueProducts.push(group);\n });\n }\n });\n }\n\n get stockIssueProducts(): FormArray {\n return this.form.get('stock_issue_products') as FormArray;\n }\n\n createStockIssueProduct() {\n return this.fb.group({\n id: [''],\n product_id: ['', Validators.required],\n location_from_id: ['', this.locationCount() > 0 ? Validators.required : null],\n quantity: [0, [Validators.required, Validators.min(0)]],\n particulars: [''],\n issuable_id: [this.issuableData()?.issuable_id ?? ''],\n issuable_type: [this.issuableData()?.issuable_type ?? '']\n });\n }\n\n addStockIssueProduct() {\n this.stockIssueProducts.push(this.createStockIssueProduct());\n }\n\n removeStockIssueProduct(index: number) {\n this.stockIssueProducts.removeAt(index);\n }\n\n clearProducts() {\n this.stockIssueProducts.clear();\n }\n\n save() {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.form.markAsDirty();\n this.alertService.addAlert('Please check the form for errors.', 'error');\n return;\n }\n\n if (this.stockIssueProducts.length === 0) {\n this.alertService.addAlert('Please add at least one product.', 'error');\n return;\n }\n\n const formData = this.form.getRawValue();\n const data: any = {\n id: this.stockIssue()?.id ?? null,\n date: moment(formData.date).format('YYYY-MM-DD'),\n details: formData.particulars,\n recipient_id: formData.recipient_id || null,\n products: formData.stock_issue_products.map((row: any) => ({\n id: row.product_id,\n product_id: row.product_id,\n quantity: row.quantity,\n location_from_id: row.location_from_id,\n particulars: row.particulars,\n issuable_id: row.issuable_id,\n issuable_type: row.issuable_type\n }))\n };\n\n this.isWorking = true;\n const request$ = this.stockIssue()?.id\n ? this.stockIssueService.update(data)\n : this.stockIssueService.store(data);\n\n request$.subscribe({\n next: () => {\n this.isWorking = false;\n this.alertService.addAlert('Stock issues saved successfully!', 'success');\n this.location.back();\n },\n error: () => {\n this.isWorking = false;\n }\n });\n }\n\n cancel() {\n this.location.back();\n }\n}\n","<mat-card class=\"d-flex flex-column gap-2 container\">\n <mat-card-content>\n\n <div class=\"d-flex flex-row justify-content-between align-items-center gap-1\">\n <h5>\n <span class=\"material-symbols-outlined align-middle\">upload</span>\n Issue Stock\n </h5>\n <app-form-configuration-for-form formCode=\"stock-issue\"></app-form-configuration-for-form>\n </div>\n\n <form class=\"d-flex flex-column gap-2\" [formGroup]=\"form\" (submit)=\"save()\">\n\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex flex-row gap-2 justify-content-between\">\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Date</mat-label>\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" formControlName=\"date\" required>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\">{{ getErrorMessage('date') }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\"\n *ngIf=\"formConfigurationUtilityService.getFieldEnabled('recipient_id')\">\n <mat-label>Recipient\n <sup *ngIf=\"formConfigurationUtilityService.getFieldRequired('recipient_id')\">*</sup>\n </mat-label>\n <app-searchable-selector apiUrl=\"api/recipients\" formControlName=\"recipient_id\"\n titleField=\"name\"></app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('recipient_id')\">{{ getErrorMessage('recipient_id')\n }}</mat-error>\n </mat-form-field>\n\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Particulars</mat-label>\n <textarea matInput placeholder=\"Particulars\" formControlName=\"particulars\"></textarea>\n </mat-form-field>\n </div>\n </div>\n\n <table class=\"table mt-3\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">Product</th>\n <th *ngIf=\"locationCount() > 0\" scope=\"col\">Location</th>\n <th scope=\"col\" width=\"45\">Quantity</th>\n <th scope=\"col\">Particulars</th>\n <th scope=\"col\" class=\"text-center\" width=\"50\"></th>\n </tr>\n </thead>\n <tbody formArrayName=\"stock_issue_products\">\n <tr *ngFor=\"let row of stockIssueProducts.controls; let i = index\" [formGroupName]=\"i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td>\n <mat-form-field appearance='outline' class=\"w-100\">\n <mat-label>Product</mat-label>\n <app-searchable-selector apiUrl='api/products' formControlName=\"product_id\"\n titleField='name' [cache]=\"true\" required></app-searchable-selector>\n </mat-form-field>\n </td>\n <td *ngIf=\"locationCount() > 0\">\n <app-location-selector appearance='outline' label=\"Location From\"\n hint=\"Which warehouse are we taking stock from?\"\n formControlName=\"location_from_id\"></app-location-selector>\n </td>\n <td>\n <mat-form-field appearance='outline' class=\"wpx-90\">\n <mat-label>Quantity</mat-label>\n <input matInput formControlName=\"quantity\" type=\"number\" min=\"0\">\n </mat-form-field>\n </td>\n <td>\n <mat-form-field appearance='outline' class='w-100'>\n <mat-label>Particulars</mat-label>\n <textarea matInput formControlName=\"particulars\" rows=\"2\"></textarea>\n </mat-form-field>\n </td>\n <td class=\"text-center align-middle\">\n <div class=\"d-flex gap-2 justify-content-center align-items-center text-secondary\">\n <app-techlify-icon role='button' name='delete' (click)=\"removeStockIssueProduct(i)\"\n matTooltip=\"Remove row\"></app-techlify-icon>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan=\"6\" class=\"text-end\">\n <div class=\"d-flex flex-row gap-2 justify-content-end\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearProducts()\"\n [disabled]=\"stockIssueProducts.length === 0\">\n <mat-icon>block</mat-icon> CLEAR ALL\n </button>\n <button mat-raised-button color=\"primary\" type=\"button\"\n (click)=\"addStockIssueProduct()\">\n <mat-icon>add</mat-icon> ADD\n </button>\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n\n <div class=\"d-flex justify-content-end align-items-center gap-2 mt-2\">\n <button [disabled]=\"isWorking\" mat-flat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button [disabled]=\"isWorking || stockIssueProducts.length === 0\" mat-raised-button color=\"primary\"\n type=\"submit\">Save</button>\n </div>\n\n </form>\n\n </mat-card-content>\n</mat-card>"],"names":["i3.StockIssueService","i4","i5.LocationService","i6"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"techlify-inventory-common-stock-issue-view.component-BDOR4X49.mjs","sources":["../../../projects/inventory-common/src/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-issue/stock-issue-view/stock-issue-view.component.html"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { CommonModule, Location } from '@angular/common';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { MaterialModule } from '../../material.module';\nimport { StockIssueService } from '../stock-issue.service';\nimport { EntityFilesViewAllModule, NoteModule, TechlifyDeleteButtonComponent, TechlifyFeatureModule, TechlifyIconModule } from 'ngx-techlify-core';\n\n@Component({\n selector: 'app-stock-issue-view',\n templateUrl: './stock-issue-view.component.html',\n styleUrl: './stock-issue-view.component.css',\n standalone: true,\n imports: [\n CommonModule,\n MaterialModule,\n RouterLink,\n TechlifyIconModule,\n NoteModule,\n EntityFilesViewAllModule,\n TechlifyFeatureModule,\n TechlifyDeleteButtonComponent\n ],\n})\nexport class StockIssueViewComponent implements OnInit {\n\n id!: number;\n isLoading!: boolean;\n stockIssue!: any;\n\n constructor(\n private activatedRoute: ActivatedRoute,\n protected service: StockIssueService,\n private location: Location\n ) { }\n\n ngOnInit(): void {\n this.activatedRoute.params.subscribe(params => {\n this.id = parseInt(params['id']);\n if (this.id) {\n this.loadData();\n }\n });\n }\n\n loadData() {\n this.isLoading = true;\n this.service.show(this.id).subscribe({\n next: (response: any) => {\n this.stockIssue = response?.item;\n this.isLoading = false;\n },\n error: () => {\n this.isLoading = false;\n }\n });\n }\n\n redirectBack() {\n this.location.back();\n }\n}\n","<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"stockIssue\" class=\"d-flex flex-column justify-content-start gap-2\">\n <mat-card>\n <mat-card-content>\n <h3 class=\"mb-0\">Stock Issue for {{ stockIssue?.stock_issue_products[0]?.product?.name }}</h3>\n </mat-card-content>\n </mat-card>\n <div class=\"d-flex justify-content-start align-items-start gap-2\">\n <div class=\"d-flex flex-column gap-2\" style=\"width: 350px\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\"> ungroup </span>\n <strong class=\"mb-0 text-dark\">Information</strong>\n </div>\n <div class=\"d-flex justify-content-start align-items-center gap-2 text-secondary\">\n <app-techlify-icon name=\"edit\" role=\"button\"\n [routerLink]=\"['/inventory/stock-issues/form', stockIssue?.id]\"></app-techlify-icon>\n <app-techlify-delete-button [model]=\"stockIssue\" [service]=\"service\"\n [data]=\"{ title: stockIssue?.id, type: 'Stock Receipt Product' }\"\n (deleted)=\"redirectBack();\">\n </app-techlify-delete-button>\n </div>\n </mat-card-content>\n <mat-card-content class=\"d-flex flex-column justify-content-start gap-2 mt-3\">\n <!-- Product & SKU / Date -->\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex flex-column gap-0\">\n <a class=\"text-decoration-none text-black\"\n [routerLink]=\"['/inventory/products', stockIssue?.stock_issue_products[0]?.product?.id, 'view']\">\n <p class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.product?.name }}</p>\n </a>\n <small *ngIf=\"stockIssue?.stock_issue_products[0]?.product?.sku\">{{\n stockIssue?.stock_issue_products[0]?.product?.sku }}</small>\n </div>\n <div class=\"d-flex flex-column justify-content-end gap-0\">\n <small *ngIf=\"stockIssue?.date\">{{ stockIssue?.date | date }}</small>\n <ng-container *ngIf=\"stockIssue?.stock_issue_products[0]?.batch?.expires_on\">\n <small techlifyFeatureEnabled=\"product-batch-numbers\">\n Expires on {{ stockIssue?.stock_issue_products[0]?.batch?.expires_on | date }}\n </small>\n </ng-container>\n </div>\n </div>\n\n <!-- Quantity & Location -->\n <div class=\"row\">\n <div class=\"col-6\" *ngIf=\"stockIssue?.stock_issue_products[0]?.quantity\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Quantity</small>\n <div class=\"d-flex gap-1\">\n <h3 class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.quantity }}</h3>\n <small class=\"text-secondary\">{{\n stockIssue?.stock_issue_products[0]?.product?.measure?.title\n }}</small>\n </div>\n </div>\n </div>\n\n <div class=\"col-6\" *ngIf=\"stockIssue?.stock_issue_products[0]?.location\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Location</small>\n <p class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.location?.title }}</p>\n </div>\n </div>\n </div>\n\n <!-- Batch & Expires On (if feature enabled) -->\n <ng-container *ngIf=\"stockIssue?.stock_issue_products[0]?.batch\">\n <div class=\"row\" techlifyFeatureEnabled=\"product-batch-numbers\">\n <div class=\"col-6\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Batch</small>\n <p class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.batch?.batch_number }}</p>\n </div>\n </div>\n <div class=\"col-6\" *ngIf=\"stockIssue?.stock_issue_products[0]?.batch?.expires_on\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Expires On</small>\n <p class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.batch?.expires_on | date }}\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Particulars -->\n <div class=\"row\" *ngIf=\"stockIssue?.stock_issue_products[0]?.particulars\">\n <div class=\"col-12\">\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Particulars</small>\n <p class=\"mb-0\">{{ stockIssue?.stock_issue_products[0]?.particulars }}</p>\n </div>\n </div>\n </div>\n\n <!-- Creator -->\n <div class=\"row\" *ngIf=\"stockIssue?.creator\">\n <div class=\"col-12\">\n <small class=\"mb-0\">\n <span class=\"text-secondary\">Created By</span> {{ stockIssue?.creator?.name }}\n <span class=\"text-secondary\">On</span> {{ stockIssue?.created_at | date }}\n </small>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"StockIssue\"\n [relatedModelId]=\"stockIssue?.id\"></app-note-list>\n </div>\n\n <div style=\"width: calc(100% - 350px - 0.5rem)\">\n <app-entity-files-view-all title=\"Document\" [entityId]=\"stockIssue?.id\" entityType=\"StockIssue\"\n viewMode=\"timeline\">\n </app-entity-files-view-all>\n </div>\n </div>\n</div>"],"names":["i2.StockIssueService","i6"],"mappings":"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"}