techlify-inventory-common 18.43.0 → 18.44.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/inventory-dashboard-page/inventory-dashboard-page.component.mjs +6 -6
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +4 -4
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +7 -7
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.mjs +2 -2
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-single-product-form.component.mjs +180 -0
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-BAv_zX8Q.mjs → techlify-inventory-common-category.module-BfHGmavx.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-BAv_zX8Q.mjs.map → techlify-inventory-common-category.module-BfHGmavx.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-measure.module-BvCXv-OU.mjs → techlify-inventory-common-measure.module-DjlcLsla.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-measure.module-BvCXv-OU.mjs.map → techlify-inventory-common-measure.module-DjlcLsla.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-BSrVKxdr.mjs → techlify-inventory-common-purchase-order-view.component-CGugaBn2.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-purchase-order-view.component-BSrVKxdr.mjs.map → techlify-inventory-common-purchase-order-view.component-CGugaBn2.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-form.component-qViURcnj.mjs → techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issue-form.component-qViURcnj.mjs.map → techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BlmkYmV0.mjs → techlify-inventory-common-stock-issue-view.component-DcXL56oB.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issue-view.component-BlmkYmV0.mjs.map → techlify-inventory-common-stock-issue-view.component-DcXL56oB.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-EM-86Ss5.mjs → techlify-inventory-common-techlify-inventory-common-B1Sd5HAp.mjs} +28 -28
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-B1Sd5HAp.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.d.ts +1 -1
- package/lib/inventory-common/product/product-view-page/product-view-page.component.d.ts +1 -1
- package/lib/inventory-common/stock-issue/stock-issue-products-list/stock-issue-products-list.component.d.ts +1 -1
- package/lib/inventory-common/stock-issue/stock-issue-single-product-form/{stock-issue-simple-form/stock-issue-single-product-form.component.d.ts → stock-issue-single-product-form.component.d.ts} +3 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/inventory-common/stock-issue/stock-issue-single-product-form/stock-issue-simple-form/stock-issue-single-product-form.component.mjs +0 -180
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-EM-86Ss5.mjs.map +0 -1
|
@@ -1808,16 +1808,16 @@ class StockIssueSingleProductFormComponent extends TechlifyFormComponent {
|
|
|
1808
1808
|
this.patchFormProducts(this.stockIssue);
|
|
1809
1809
|
}
|
|
1810
1810
|
else {
|
|
1811
|
-
if (this.product?.
|
|
1812
|
-
const { quantity, location_id } = this.product.
|
|
1811
|
+
if (this.product?.last_stock_issue) {
|
|
1812
|
+
const { quantity, location_id } = this.product.last_stock_issue;
|
|
1813
1813
|
this.form.patchValue({ quantity, location_id });
|
|
1814
1814
|
}
|
|
1815
1815
|
}
|
|
1816
1816
|
}
|
|
1817
|
-
patchFormProducts(
|
|
1818
|
-
if (
|
|
1819
|
-
this.updateFormWithProductArray(
|
|
1820
|
-
this.product =
|
|
1817
|
+
patchFormProducts(stockIssue) {
|
|
1818
|
+
if (stockIssue.stock_issue_products?.length > 0) {
|
|
1819
|
+
this.updateFormWithProductArray(stockIssue.stock_issue_products[0]);
|
|
1820
|
+
this.product = stockIssue.stock_issue_products[0].product;
|
|
1821
1821
|
}
|
|
1822
1822
|
}
|
|
1823
1823
|
updateFormWithProductArray(stockIssueProduct) {
|
|
@@ -1851,7 +1851,7 @@ class StockIssueSingleProductFormComponent extends TechlifyFormComponent {
|
|
|
1851
1851
|
next: (response) => {
|
|
1852
1852
|
this.isWorking = false;
|
|
1853
1853
|
this.dialogRef.close(response?.item.stock_issue_products);
|
|
1854
|
-
this.alertService.addAlert('Stock
|
|
1854
|
+
this.alertService.addAlert('Stock Issue Saved Successfully!', 'success');
|
|
1855
1855
|
},
|
|
1856
1856
|
error: () => (this.isWorking = false),
|
|
1857
1857
|
});
|
|
@@ -2378,7 +2378,7 @@ class ProductBasicInfoComponent {
|
|
|
2378
2378
|
loadProductStocksSummary() {
|
|
2379
2379
|
const params = {
|
|
2380
2380
|
product_ids: this.product?.id,
|
|
2381
|
-
include: 'stock_receipts_quantity_sum,
|
|
2381
|
+
include: 'stock_receipts_quantity_sum,stock_issue_quantity_sum,stock_quantity_remaining',
|
|
2382
2382
|
};
|
|
2383
2383
|
this.stockSummaryService.summary(params).subscribe({
|
|
2384
2384
|
next: (response) => {
|
|
@@ -2387,11 +2387,11 @@ class ProductBasicInfoComponent {
|
|
|
2387
2387
|
});
|
|
2388
2388
|
}
|
|
2389
2389
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductBasicInfoComponent, deps: [{ token: StockSummaryService }, { token: ProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2390
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: { product: "product" }, outputs: { saved: "saved", deleted: "deleted" }, ngImport: i0, template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.
|
|
2390
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: { product: "product" }, outputs: { saved: "saved", deleted: "deleted" }, ngImport: i0, template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_issue_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_issue\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_issue?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- On Hand -->\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">On Hand</small>\n <p class=\"mb-0 fw-semibold fs-2 text-success\"\n [ngClass]=\"{ 'text-danger': product?.stock_on_hand < product?.reorder_point }\">\n {{ (product?.stock_on_hand | number) ?? 0 }}</p>\n <small *ngIf=\"product?.reorder_point\" class=\"text-secondary\">\n Reorder At {{ product?.reorder_point }}\n </small>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Description -->\n <mat-card-content *ngIf=\"product?.description\" class=\"pt-2\">\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0 mt-1\">{{ product?.description }}</p>\n </mat-card-content>\n\n <div class=\"d-flex flex-row align-items-center w-100 mt-2 gap-3 overflow-hidden\">\n <div class=\"barcode-container flex-grow-1 min-width-0 overflow-hidden\">\n <ngx-barcode6 [bc-value]=\"product?.sku\" [bc-display-value]=\"true\"></ngx-barcode6>\n </div>\n <div class=\"flex-shrink-0\">\n <qrcode [qrdata]=\"product?.sku\" [width]=\"128\"></qrcode>\n </div>\n </div>\n\n</mat-card>", styles: [".product-image-container{width:80px;height:80px}.barcode-container{min-width:0}.barcode-container ::ng-deep ngx-barcode6 svg{width:100%;height:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5$1.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }, { kind: "component", type: i6$1.NgxBarcode6, selector: "ngx-barcode6", inputs: ["bc-element-type", "bc-class", "bc-format", "bc-line-color", "bc-width", "bc-height", "bc-display-value", "bc-font-options", "bc-font", "bc-text-align", "bc-text-position", "bc-text-margin", "bc-font-size", "bc-background", "bc-margin", "bc-margin-top", "bc-margin-bottom", "bc-margin-left", "bc-margin-right", "bc-value", "bc-valid"] }, { kind: "component", type: i1.TechlifyDeleteButtonComponent, selector: "app-techlify-delete-button", inputs: ["data", "model", "message", "service"], outputs: ["deleted"] }, { kind: "component", type: ProductFormButtonComponent, selector: "app-product-form-button", inputs: ["product"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }], preserveWhitespaces: true });
|
|
2391
2391
|
}
|
|
2392
2392
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductBasicInfoComponent, decorators: [{
|
|
2393
2393
|
type: Component,
|
|
2394
|
-
args: [{ selector: 'app-product-basic-info', template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.
|
|
2394
|
+
args: [{ selector: 'app-product-basic-info', template: "<mat-card *ngIf=\"product\" class=\"w-100\">\n\n <!-- Header: Image + Product Info + Actions -->\n <mat-card-content class=\"d-flex gap-3 align-items-start\">\n <div class=\"product-image-container rounded overflow-hidden flex-shrink-0\">\n <img *ngIf=\"product?.image_file_url\" [src]=\"product.image_file_url\" alt=\"{{ product?.name }}\"\n class=\"w-100 h-100 object-fit-cover\" />\n <div *ngIf=\"!product?.image_file_url\"\n class=\"w-100 h-100 bg-secondary-subtle d-flex align-items-center justify-content-center rounded\">\n <span class=\"material-symbols-outlined text-secondary\" style=\"font-size: 40px;\">inventory_2</span>\n </div>\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-start\">\n <div>\n <h5 class=\"fw-semibold mb-1\">{{ product?.name }}</h5>\n <div class=\"d-flex align-items-center gap-1 text-secondary small flex-wrap\">\n <span>{{ product?.sku }}</span>\n <span> \u2022 </span>\n <span>{{ product?.type?.title }}</span>\n <span> \u2022 </span>\n <span class=\"material-symbols-outlined\" style=\"font-size: 16px;\">view_in_ar</span>\n <span>{{ product?.measure?.title }}</span>\n </div>\n <div *ngIf=\"product?.average_cost != null\" class=\"d-flex align-items-center gap-1 text-secondary small\">\n <i class=\"fa-solid fa-money-bill\"></i>\n <span>{{ product?.average_cost | currency }}</span>\n </div>\n </div>\n <div class=\"d-flex gap-2 flex-shrink-0 align-middle text-secondary\">\n <app-product-form-button [product]=\"product\" (saved)=\"onProductSaved($event)\"></app-product-form-button>\n <app-techlify-delete-button [model]=\"product\" [data]=\"{type: 'Product', title: product?.name}\"\n [service]=\"service\"></app-techlify-delete-button>\n </div>\n </div>\n\n <!-- Categories -->\n <div *ngIf=\"product?.categories?.length\" class=\"d-flex flex-wrap gap-1 mt-2\">\n <span class=\"badge border bg-light text-dark fw-medium\" *ngFor=\"let category of product?.categories\">\n {{ category?.title }}\n </span>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Stock Summary Row -->\n <mat-card-content class=\"py-3\">\n <div class=\"row g-0\">\n <!-- Stock Receipts -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Receipts</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_receipts_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_receipt\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_receipt?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- Stock Issues -->\n <div *ngIf=\"stockSummary\" class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">Stock Issues</small>\n <p class=\"mb-0 fw-semibold fs-2\">{{ stockSummary?.stock_issue_quantity_sum | number }}</p>\n <small *ngIf=\"product?.last_stock_issue\" class=\"text-secondary\">\n Last Added On {{ product?.last_stock_issue?.date | date: 'MMM d, y' }}\n </small>\n </div>\n\n <!-- On Hand -->\n <div class=\"col-4 d-flex flex-column\">\n <small class=\"text-secondary\">On Hand</small>\n <p class=\"mb-0 fw-semibold fs-2 text-success\"\n [ngClass]=\"{ 'text-danger': product?.stock_on_hand < product?.reorder_point }\">\n {{ (product?.stock_on_hand | number) ?? 0 }}</p>\n <small *ngIf=\"product?.reorder_point\" class=\"text-secondary\">\n Reorder At {{ product?.reorder_point }}\n </small>\n </div>\n </div>\n </mat-card-content>\n\n <!-- Description -->\n <mat-card-content *ngIf=\"product?.description\" class=\"pt-2\">\n <small class=\"text-secondary\">Description</small>\n <p class=\"mb-0 mt-1\">{{ product?.description }}</p>\n </mat-card-content>\n\n <div class=\"d-flex flex-row align-items-center w-100 mt-2 gap-3 overflow-hidden\">\n <div class=\"barcode-container flex-grow-1 min-width-0 overflow-hidden\">\n <ngx-barcode6 [bc-value]=\"product?.sku\" [bc-display-value]=\"true\"></ngx-barcode6>\n </div>\n <div class=\"flex-shrink-0\">\n <qrcode [qrdata]=\"product?.sku\" [width]=\"128\"></qrcode>\n </div>\n </div>\n\n</mat-card>", styles: [".product-image-container{width:80px;height:80px}.barcode-container{min-width:0}.barcode-container ::ng-deep ngx-barcode6 svg{width:100%;height:auto}\n"] }]
|
|
2395
2395
|
}], ctorParameters: () => [{ type: StockSummaryService }, { type: ProductService }], propDecorators: { product: [{
|
|
2396
2396
|
type: Input
|
|
2397
2397
|
}], saved: [{
|
|
@@ -2410,7 +2410,7 @@ class ProductViewPageComponent {
|
|
|
2410
2410
|
productBasicInfoComponent;
|
|
2411
2411
|
productLocationList;
|
|
2412
2412
|
stockTransferList;
|
|
2413
|
-
|
|
2413
|
+
stockReceiptProductListPage;
|
|
2414
2414
|
stockIssueProductListPage;
|
|
2415
2415
|
constructor(productService, activatedRoute, location) {
|
|
2416
2416
|
this.productService = productService;
|
|
@@ -2445,7 +2445,7 @@ class ProductViewPageComponent {
|
|
|
2445
2445
|
this.getProduct(this.id);
|
|
2446
2446
|
this.productBasicInfoComponent.loadProductStocksSummary();
|
|
2447
2447
|
this.productLocationList.reload();
|
|
2448
|
-
this.
|
|
2448
|
+
this.stockReceiptProductListPage.reload();
|
|
2449
2449
|
this.stockIssueProductListPage.reload();
|
|
2450
2450
|
}
|
|
2451
2451
|
/**
|
|
@@ -2463,11 +2463,11 @@ class ProductViewPageComponent {
|
|
|
2463
2463
|
this.location.back();
|
|
2464
2464
|
}
|
|
2465
2465
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductViewPageComponent, deps: [{ token: ProductService }, { token: i4$1.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
2466
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductViewPageComponent, selector: "app-product-view-page", viewQueries: [{ propertyName: "productBasicInfoComponent", first: true, predicate: ["productBasicInfoComponent"], descendants: true }, { propertyName: "productLocationList", first: true, predicate: ["productLocationList"], descendants: true }, { propertyName: "stockTransferList", first: true, predicate: ["stockTransferList"], descendants: true }, { propertyName: "
|
|
2466
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProductViewPageComponent, selector: "app-product-view-page", viewQueries: [{ propertyName: "productBasicInfoComponent", first: true, predicate: ["productBasicInfoComponent"], descendants: true }, { propertyName: "productLocationList", first: true, predicate: ["productLocationList"], descendants: true }, { propertyName: "stockTransferList", first: true, predicate: ["stockTransferList"], descendants: true }, { propertyName: "stockReceiptProductListPage", first: true, predicate: ["stockReceiptProductListPage"], descendants: true }, { propertyName: "stockIssueProductListPage", first: true, predicate: ["stockIssueProductListPage"], descendants: true }], ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); stockReceiptProductListPage.reload()\"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #stockReceiptProductListPage [filters]=\"{ product_ids: product?.id }\"\n [product]=\"product\" [isProductView]=\"true\" (listUpdated)=\"getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-receipt-product-list>\n\n <app-stock-issue-products-list #stockIssueProductListPage [isProductView]=\"true\"\n [product]=\"product\" [filters]=\"{ product_ids: product?.id }\" (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-issue-products-list>\n\n <app-stock-transfer-list #stockTransferList *ngIf=\"product\" [productId]=\"product.id\"\n (changed)=\"stockTransferChanged()\"></app-stock-transfer-list>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StockReceiptProductsListComponent, selector: "app-stock-receipt-product-list", inputs: ["filters", "isProductView", "selectedColumns", "exportInProgress", "product"], outputs: ["listUpdated", "columnConfigReady"] }, { kind: "component", type: StockIssueProductListComponent, selector: "app-stock-issue-products-list", inputs: ["filters", "isProductView", "product", "selectedColumns", "exportInProgress", "issuableData"], outputs: ["selectedColumnsChange", "listUpdated", "columnConfigReady"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ProductLocationListComponent, selector: "app-product-location-list", inputs: ["product"], outputs: ["updated"] }, { kind: "component", type: StockTransferListComponent, selector: "app-stock-transfer-list", inputs: ["productId"], outputs: ["changed"] }, { kind: "component", type: i1.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: ProductBasicInfoComponent, selector: "app-product-basic-info", inputs: ["product"], outputs: ["saved", "deleted"] }], preserveWhitespaces: true });
|
|
2467
2467
|
}
|
|
2468
2468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProductViewPageComponent, decorators: [{
|
|
2469
2469
|
type: Component,
|
|
2470
|
-
args: [{ selector: 'app-product-view-page', template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); \"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #
|
|
2470
|
+
args: [{ selector: 'app-product-view-page', template: "<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n\n<div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div *ngIf=\"product\" class=\"d-flex justify-content-start align-items-start gap-3 w-100\">\n <div style=\"width: calc(25% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <app-product-basic-info [product]=\"product\" #productBasicInfoComponent (deleted)=\"onProductDeleted()\"\n (saved)=\"onProductUpdated($event)\"></app-product-basic-info>\n\n <app-product-location-list [product]=\"product\"\n (updated)=\"stockTransferList.reload(); stockIssueProductListPage.reload(); stockReceiptProductListPage.reload()\"\n #productLocationList></app-product-location-list>\n\n <app-note-list labelText=\"Notes\" viewMode=\"timeline\" modelType=\"Product\"\n [relatedModelId]=\"product.id\"></app-note-list>\n\n </div>\n <div class=\"d-flex flex-column gap-3 w-100\">\n <app-stock-receipt-product-list #stockReceiptProductListPage [filters]=\"{ product_ids: product?.id }\"\n [product]=\"product\" [isProductView]=\"true\" (listUpdated)=\"getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-receipt-product-list>\n\n <app-stock-issue-products-list #stockIssueProductListPage [isProductView]=\"true\"\n [product]=\"product\" [filters]=\"{ product_ids: product?.id }\" (listUpdated)=\"\n getProduct(this.id);\n productBasicInfoComponent.loadProductStocksSummary();\n productLocationList.reload();\n \"></app-stock-issue-products-list>\n\n <app-stock-transfer-list #stockTransferList *ngIf=\"product\" [productId]=\"product.id\"\n (changed)=\"stockTransferChanged()\"></app-stock-transfer-list>\n </div>\n </div>\n</div>" }]
|
|
2471
2471
|
}], ctorParameters: () => [{ type: ProductService }, { type: i4$1.ActivatedRoute }, { type: i3.Location }], propDecorators: { productBasicInfoComponent: [{
|
|
2472
2472
|
type: ViewChild,
|
|
2473
2473
|
args: ['productBasicInfoComponent']
|
|
@@ -2477,9 +2477,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2477
2477
|
}], stockTransferList: [{
|
|
2478
2478
|
type: ViewChild,
|
|
2479
2479
|
args: ['stockTransferList']
|
|
2480
|
-
}],
|
|
2480
|
+
}], stockReceiptProductListPage: [{
|
|
2481
2481
|
type: ViewChild,
|
|
2482
|
-
args: ['
|
|
2482
|
+
args: ['stockReceiptProductListPage']
|
|
2483
2483
|
}], stockIssueProductListPage: [{
|
|
2484
2484
|
type: ViewChild,
|
|
2485
2485
|
args: ['stockIssueProductListPage']
|
|
@@ -4101,7 +4101,7 @@ class InventoryDashboardPageComponent {
|
|
|
4101
4101
|
productSummaryService;
|
|
4102
4102
|
lowStockProductsCount;
|
|
4103
4103
|
stockReceiptsQtySum;
|
|
4104
|
-
|
|
4104
|
+
stockIssueQuantitySum;
|
|
4105
4105
|
constructor(productSummaryService) {
|
|
4106
4106
|
this.productSummaryService = productSummaryService;
|
|
4107
4107
|
}
|
|
@@ -4110,7 +4110,7 @@ class InventoryDashboardPageComponent {
|
|
|
4110
4110
|
}
|
|
4111
4111
|
loadProductSummary() {
|
|
4112
4112
|
const params = {
|
|
4113
|
-
include: 'low_stock_products_count,stock_receipts_quantity_sum,
|
|
4113
|
+
include: 'low_stock_products_count,stock_receipts_quantity_sum,stock_issue_quantity_sum',
|
|
4114
4114
|
date_from: moment$1().startOf('month').format('YYYY-MM-DD'),
|
|
4115
4115
|
date_to: moment$1().endOf('month').format('YYYY-MM-DD'),
|
|
4116
4116
|
};
|
|
@@ -4118,16 +4118,16 @@ class InventoryDashboardPageComponent {
|
|
|
4118
4118
|
next: (response) => {
|
|
4119
4119
|
this.lowStockProductsCount = response?.low_stock_products_count;
|
|
4120
4120
|
this.stockReceiptsQtySum = response?.stock_receipts_quantity_sum;
|
|
4121
|
-
this.
|
|
4121
|
+
this.stockIssueQuantitySum = response?.stock_issue_quantity_sum;
|
|
4122
4122
|
},
|
|
4123
4123
|
});
|
|
4124
4124
|
}
|
|
4125
4125
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InventoryDashboardPageComponent, deps: [{ token: ProductSummaryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InventoryDashboardPageComponent, selector: "app-inventory-dashboard-page", ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{
|
|
4126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InventoryDashboardPageComponent, selector: "app-inventory-dashboard-page", ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockIssueQuantitySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-quick-search></app-product-quick-search>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-summary-chart title=\"Product By Category\"></app-product-summary-chart>\n </div>\n </div>\n <div style=\"width: 300px\" class=\"d-flex flex-column gap-3 h-100\">\n <mat-card class=\"h-100\">\n <mat-card-content>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-icon>flag</mat-icon>\n <h3 class=\"mb-0 fw-bold\">Reports</h3>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-start gap-3\">\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark\"\n routerLink=\"/inventory/reports/low-stock-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\"\n routerLink=\"/inventory/reports/inventory-value-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i11$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: LowStockProductsWidgetComponent, selector: "app-low-stock-products-widget" }, { kind: "component", type: ProductSummaryChartComponent, selector: "app-product-summary-chart", inputs: ["height", "title"] }, { kind: "component", type: ProductQuickSearchComponent, selector: "app-product-quick-search" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }], preserveWhitespaces: true });
|
|
4127
4127
|
}
|
|
4128
4128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InventoryDashboardPageComponent, decorators: [{
|
|
4129
4129
|
type: Component,
|
|
4130
|
-
args: [{ selector: 'app-inventory-dashboard-page', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{
|
|
4130
|
+
args: [{ selector: 'app-inventory-dashboard-page', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 vh-100\">\n <div class=\"row\" style=\"width: calc(100% - 300px)\">\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\" style=\"color: #f5222d !important\"> inventory_2 </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Low Stock Products</small>\n <h1 class=\"mb-0 fw-bold\">{{ lowStockProductsCount | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_down </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Received This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockReceiptsQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-4 mb-3\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-center align-items-center gap-3\">\n <span class=\"material-symbols-outlined fs-1 fw-bold\"> arrow_circle_up </span>\n <div class=\"d-flex flex-column gap-0\">\n <small class=\"text-secondary\">Products Issued This Month</small>\n <h1 class=\"mb-0 fw-bold\">{{ stockIssueQuantitySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-quick-search></app-product-quick-search>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\n </div>\n <div class=\"col-lg-6 mb-3\">\n <app-product-summary-chart title=\"Product By Category\"></app-product-summary-chart>\n </div>\n </div>\n <div style=\"width: 300px\" class=\"d-flex flex-column gap-3 h-100\">\n <mat-card class=\"h-100\">\n <mat-card-content>\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <mat-icon>flag</mat-icon>\n <h3 class=\"mb-0 fw-bold\">Reports</h3>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-start gap-3\">\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark\"\n routerLink=\"/inventory/reports/low-stock-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Low Stock Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n <a\n class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\"\n routerLink=\"/inventory/reports/inventory-value-report\"\n >\n <span class=\"material-symbols-outlined fs-3\"> description </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\"> chevron_forward </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n" }]
|
|
4131
4131
|
}], ctorParameters: () => [{ type: ProductSummaryService }] });
|
|
4132
4132
|
|
|
4133
4133
|
class LowStockReportService extends TechlifyService {
|
|
@@ -4593,7 +4593,7 @@ const routes$6 = [
|
|
|
4593
4593
|
},
|
|
4594
4594
|
{
|
|
4595
4595
|
path: "measures",
|
|
4596
|
-
loadChildren: () => import('./techlify-inventory-common-measure.module-
|
|
4596
|
+
loadChildren: () => import('./techlify-inventory-common-measure.module-DjlcLsla.mjs').then((mod) => mod.MeasureModule),
|
|
4597
4597
|
},
|
|
4598
4598
|
{
|
|
4599
4599
|
path: 'stock-issues',
|
|
@@ -4605,7 +4605,7 @@ const routes$6 = [
|
|
|
4605
4605
|
},
|
|
4606
4606
|
{
|
|
4607
4607
|
path: 'categories',
|
|
4608
|
-
loadChildren: () => import('./techlify-inventory-common-category.module-
|
|
4608
|
+
loadChildren: () => import('./techlify-inventory-common-category.module-BfHGmavx.mjs').then((mod) => mod.CategoryModule),
|
|
4609
4609
|
},
|
|
4610
4610
|
{
|
|
4611
4611
|
path: 'products',
|
|
@@ -4922,17 +4922,17 @@ const routes$5 = [
|
|
|
4922
4922
|
},
|
|
4923
4923
|
{
|
|
4924
4924
|
path: 'form',
|
|
4925
|
-
loadComponent: () => import('./techlify-inventory-common-stock-issue-form.component-
|
|
4925
|
+
loadComponent: () => import('./techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs').then(m => m.StockIssueFormComponent),
|
|
4926
4926
|
canLoad: [AuthenticationGuard]
|
|
4927
4927
|
},
|
|
4928
4928
|
{
|
|
4929
4929
|
path: 'form/:id',
|
|
4930
|
-
loadComponent: () => import('./techlify-inventory-common-stock-issue-form.component-
|
|
4930
|
+
loadComponent: () => import('./techlify-inventory-common-stock-issue-form.component-BNcyDEr2.mjs').then(m => m.StockIssueFormComponent),
|
|
4931
4931
|
canLoad: [AuthenticationGuard]
|
|
4932
4932
|
},
|
|
4933
4933
|
{
|
|
4934
4934
|
path: ':id/view',
|
|
4935
|
-
loadComponent: () => import('./techlify-inventory-common-stock-issue-view.component-
|
|
4935
|
+
loadComponent: () => import('./techlify-inventory-common-stock-issue-view.component-DcXL56oB.mjs').then(m => m.StockIssueViewComponent),
|
|
4936
4936
|
canLoad: [AuthenticationGuard]
|
|
4937
4937
|
}
|
|
4938
4938
|
];
|
|
@@ -6237,7 +6237,7 @@ const routes$4 = [
|
|
|
6237
6237
|
},
|
|
6238
6238
|
{
|
|
6239
6239
|
path: 'purchase-orders/:id/view',
|
|
6240
|
-
loadComponent: () => import('./techlify-inventory-common-purchase-order-view.component-
|
|
6240
|
+
loadComponent: () => import('./techlify-inventory-common-purchase-order-view.component-CGugaBn2.mjs').then(m => m.PurchaseOrderViewComponent)
|
|
6241
6241
|
}
|
|
6242
6242
|
],
|
|
6243
6243
|
},
|
|
@@ -7078,4 +7078,4 @@ var shelf_module = /*#__PURE__*/Object.freeze({
|
|
|
7078
7078
|
*/
|
|
7079
7079
|
|
|
7080
7080
|
export { IncidentListComponent as $, StockIssueProductFormButtonComponent as A, StockReceiptsModule as B, StockReceiptPageComponent as C, StockReceiptListComponent as D, StockReceiptProductsListComponent as E, StockReceiptSingleProductFormComponent as F, StockReceiptViewComponent as G, StockReceiptProductFormComponent as H, InventoryCommonRoutingModule as I, StockReceiptProductFormButtonComponent as J, StockTransferListComponent as K, LocationService as L, MeasureService as M, StockTransferFormComponent as N, StockTransferService as O, PurchaseOrderService as P, SupplierModule as Q, SupplierFormButtonComponent as R, StockIssueService as S, TechlifyFilterComponent as T, SupplierFormComponent as U, SuppliersListComponent as V, SupplierTypeService as W, PayeeSelectorModule as X, PayeeSelectorComponent as Y, IncidentModule as Z, IncidentService as _, TechlifyFilterModule as a, IncidentFormComponent as a0, IncidentFormButtonComponent as a1, RatingModule as a2, RatingService as a3, RatingListComponent as a4, RatingFormComponent as a5, RatingFormButtonComponent as a6, ExportToExcelButtonComponent as a7, LocationModule as a8, LocationListComponent as a9, LocationFormComponent as aa, LocationFormButtonComponent as ab, ShelfModule as ac, ShelfService as ad, ShelfListComponent as ae, ShelfFormComponent as af, ShelfFormButtonComponent as ag, MaterialModule as b, LocationSelectorComponent as c, InventoryCommonModule as d, StockSummaryService as e, ProductModule as f, ProductFormComponent as g, ProductBasicInfoComponent as h, ProductFormButtonComponent as i, ProductQuickSearchComponent as j, ProductSearchModule as k, ProductSearchComponent as l, ProductListComponent as m, ProductService as n, ProductFormService as o, ProductBatchUpdateFormComponent as p, ProductImportPageComponent as q, ProductViewPageComponent as r, StockIssueModule as s, StockIssuePageComponent as t, StockIssuePageModule as u, StockIssueSingleProductFormComponent as v, StockIssueListComponent as w, StockIssueProductListComponent as x, StockIssueProductService as y, StockIssueProductFormComponent as z };
|
|
7081
|
-
//# sourceMappingURL=techlify-inventory-common-techlify-inventory-common-
|
|
7081
|
+
//# sourceMappingURL=techlify-inventory-common-techlify-inventory-common-B1Sd5HAp.mjs.map
|