techlify-inventory-common 18.49.0 → 18.50.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.
- package/esm2022/lib/inventory-common/location/location-form/location-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/location/location.service.mjs +3 -3
- package/esm2022/lib/inventory-common/location/shelf/shelf-form/shelf-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.mjs +10 -6
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-product-form/stock-issue-product-form.component.mjs +3 -3
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +4 -4
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.mjs +8 -6
- package/esm2022/lib/inventory-common/stock-receipts/stock-receipt-product-form/stock-receipt-product-form.component.mjs +3 -3
- 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
- package/esm2022/lib/inventory-common/stock-transfer/stock-transfer-form/stock-transfer-form.component.mjs +3 -3
- package/fesm2022/{techlify-inventory-common-category.module-BBpgG9L3.mjs → techlify-inventory-common-category.module-CGzFP2S_.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-BBpgG9L3.mjs.map → techlify-inventory-common-category.module-CGzFP2S_.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-6qbMJdAs.mjs → techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-6qbMJdAs.mjs.map → techlify-inventory-common-purchase-order-view.component-5mLg0IvH.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-recipient.module-DsYw54Uj.mjs → techlify-inventory-common-recipient.module-DLoP6xI3.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-recipient.module-DsYw54Uj.mjs.map → techlify-inventory-common-recipient.module-DLoP6xI3.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs → techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs} +11 -6
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-MYEKRteU.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-b_8gpI7x.mjs → techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issue-product-view.component-b_8gpI7x.mjs.map → techlify-inventory-common-stock-issue-product-view.component-C-c83FEn.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BDOR4X49.mjs → techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BDOR4X49.mjs.map → techlify-inventory-common-stock-issue-view.component-Co7hXpDq.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs → techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs} +78 -224
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-CWxzlvVi.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/location/location.service.d.ts +1 -1
- package/lib/inventory-common/stock-issue/stock-issue-form/stock-issue-form.component.d.ts +1 -0
- package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts +1 -0
- package/package.json +1 -1
- package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs +0 -161
- package/fesm2022/techlify-inventory-common-stock-issue-form.component-C3RoFfcY.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-Bveawfj2.mjs.map +0 -1
- package/lib/inventory-common/location/location-selector/location-selector.component.d.ts +0 -46
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
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-CWxzlvVi.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>;
|
package/lib/inventory-common/stock-receipts/stock-receipt-form/stock-receipt-form.component.d.ts
CHANGED
|
@@ -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
package/esm2022/lib/inventory-common/location/location-selector/location-selector.component.mjs
DELETED
|
@@ -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 +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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"}
|