techlify-inventory-common 18.0.1 → 18.1.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/product/product-list/product-list.component.mjs +30 -40
- package/esm2022/lib/inventory-common/product/product.module.mjs +7 -4
- package/esm2022/lib/inventory-common/supplier/supplier-form/supplier-form.component.mjs +9 -10
- package/esm2022/lib/inventory-common/supplier/supplier.module.mjs +7 -3
- package/esm2022/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.mjs +77 -118
- package/fesm2022/{techlify-inventory-common-category.module-Stn6e73V.mjs → techlify-inventory-common-category.module-CNm2bEsx.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-category.module-Stn6e73V.mjs.map → techlify-inventory-common-category.module-CNm2bEsx.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-measure.module-CirswKXn.mjs → techlify-inventory-common-measure.module-BEaRHh5Z.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-measure.module-CirswKXn.mjs.map → techlify-inventory-common-measure.module-BEaRHh5Z.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-product.module-qdeafFV5.mjs → techlify-inventory-common-product.module-BV9Cy88x.mjs} +34 -38
- package/fesm2022/techlify-inventory-common-product.module-BV9Cy88x.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs → techlify-inventory-common-stock-issuances-list.module-Dt6gx-ji.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-issuances-list.module-CyFDxARk.mjs.map → techlify-inventory-common-stock-issuances-list.module-Dt6gx-ji.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs → techlify-inventory-common-stock-issuances.module-BQRRP-hW.mjs} +4 -4
- package/fesm2022/{techlify-inventory-common-stock-issuances.module-Dm9i2kcf.mjs.map → techlify-inventory-common-stock-issuances.module-BQRRP-hW.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs → techlify-inventory-common-stock-receipt-form.module-DND0GNlf.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-stock-receipt-form.module-BZDrN7la.mjs.map → techlify-inventory-common-stock-receipt-form.module-DND0GNlf.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs → techlify-inventory-common-stock-receipts.module-BvYaKITT.mjs} +3 -3
- package/fesm2022/{techlify-inventory-common-stock-receipts.module-CUPdWteR.mjs.map → techlify-inventory-common-stock-receipts.module-BvYaKITT.mjs.map} +1 -1
- package/fesm2022/techlify-inventory-common-supplier-form.component-DVBnhiyH.mjs +177 -0
- package/fesm2022/techlify-inventory-common-supplier-form.component-DVBnhiyH.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-supplier.module-gzHesNtQ.mjs → techlify-inventory-common-supplier.module-Bwa7gx14.mjs} +73 -130
- package/fesm2022/techlify-inventory-common-supplier.module-Bwa7gx14.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs → techlify-inventory-common-techlify-inventory-common-GFYF7JCA.mjs} +7 -7
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs.map → techlify-inventory-common-techlify-inventory-common-GFYF7JCA.mjs.map} +1 -1
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/product/product-list/product-list.component.d.ts +5 -7
- package/lib/inventory-common/product/product.module.d.ts +1 -1
- package/lib/inventory-common/supplier/supplier.module.d.ts +2 -1
- package/lib/inventory-common/supplier/suppliers-list/suppliers-list.component.d.ts +14 -24
- package/package.json +1 -1
- package/esm2022/lib/inventory-common/supplier/supplier-type.service.mjs +0 -25
- package/fesm2022/techlify-inventory-common-product.module-qdeafFV5.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs +0 -178
- package/fesm2022/techlify-inventory-common-supplier-form.component-CHmMG7O8.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-supplier.module-gzHesNtQ.mjs.map +0 -1
- package/lib/inventory-common/supplier/supplier-type.service.d.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"techlify-inventory-common-techlify-inventory-common-Czyc0jLI.mjs","sources":["../../../projects/inventory-common/src/lib/inventory-common/product/product.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-common-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-common.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-summary.service.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.component.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.component.html","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.module.ts","../../../projects/inventory-common/src/public-api.ts","../../../projects/inventory-common/src/techlify-inventory-common.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport {\n DataManager,\n HttpService,\n TechlifyServiceBaseClass,\n} from \"ngx-techlify-core\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProductService extends TechlifyServiceBaseClass {\n constructor(\n private dataManager: DataManager,\n public httpService: HttpService\n ) {\n super(httpService, \"products\");\n }\n\n getProducts(filters?: any) {\n return this.dataManager.GET(`api/products`, filters);\n }\n\n getProduct(id: any) {\n return this.dataManager.GET(`api/products/${id}`);\n }\n\n createProduct(model: any) {\n return this.dataManager.POST(`api/products`, model);\n }\n\n updateProducts(model: any) {\n return this.dataManager.PUT(`api/products/${model.id}`, model);\n }\n deleteProduct(id: any) {\n return this.dataManager.DELETE(`api/products/${id}`);\n }\n\n getProductMeasures(filters?: any) {\n return this.dataManager.GET(`api/product-measures`, filters);\n }\n\n createProductMeasure(model: any) {\n return this.dataManager.POST(`api/product-measures`, model);\n }\n\n updateProductMeasure(model: any) {\n return this.dataManager.PUT(`api/product-measures/${model.id}`, model);\n }\n\n summary(params?: any): Observable<any> {\n return this.httpService.get(\"api/products-summary\", { params });\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { TechlifyListingControllerInterface } from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: \"app-low-stock-products-widget\",\n templateUrl: \"./low-stock-products-widget.component.html\",\n})\nexport class LowStockProductsWidgetComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n displayedColumns: string[] = [\"#\", \"Product\", \"Stock\", \"Reorder Point\"];\n\n constructor(private productService: ProductService) {\n super();\n this.lastPage = 0;\n this.perPage = 1000;\n }\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n is_low_stock: true,\n num_items: this.perPage + \"|\" + this.page,\n };\n this.isWorking = true;\n this.productService.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models?.concat(response?.data);\n this.lastPage = response?.last_page;\n this.isWorking = false;\n },\n error: () => (this.isWorking = false),\n });\n }\n}\n","<mat-card style=\"max-height: 460px; overflow: auto\">\n <mat-card-content>\n <h3>Low Stock Products</h3>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Stock Column -->\n <ng-container matColumnDef=\"Stock\">\n <th mat-header-cell *matHeaderCellDef>Stock</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.current_stock }}</td>\n </ng-container>\n\n <!-- Reorder Point Column -->\n <ng-container matColumnDef=\"Reorder Point\">\n <th mat-header-cell *matHeaderCellDef>Reorder Point</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.reorder_point }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n <!-- <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>-->\n </mat-card-content>\n</mat-card>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatCard, MatCardContent } from \"@angular/material/card\";\nimport { ChartType, GoogleChartsModule } from \"angular-google-charts\";\nimport { MatProgressBar } from \"@angular/material/progress-bar\";\nimport { NgIf } from \"@angular/common\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: 'app-product-summary-chart',\n standalone: true,\n imports: [\n MatCard,\n MatCardContent,\n GoogleChartsModule,\n MatProgressBar,\n NgIf\n ],\n templateUrl: './product-summary-chart.component.html',\n styleUrl: './product-summary-chart.component.scss'\n})\nexport class ProductSummaryChartComponent implements OnInit {\n @Input() height: number = 400;\n @Input() title = 'Product Summary';\n\n constructor(\n private productService: ProductService\n ) {\n }\n\n chart: any = {\n title: 'Pie Chart',\n type: ChartType.PieChart,\n data: [],\n options: {\n pieSliceText: 'value'\n }\n };\n isLoading: boolean = false;\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n include: 'products_aggregated',\n group_by: 'category_id',\n }\n this.isLoading = true;\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n let data: any[] = [];\n response?.products_aggregated?.forEach((item: any) => {\n data.push([item?.title, item?.product_count]);\n })\n this.chart.data = data;\n this.isLoading = false;\n },\n error: () => (this.isLoading = false)\n });\n }\n}\n","<mat-card>\n <mat-card-content>\n <h3>{{ title }}</h3>\n </mat-card-content>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n <mat-card-content *ngIf=\"chart.data?.length > 0\">\n <google-chart class=\"w-100\" [height]=\"height\" [type]=\"chart.type\" [data]=\"chart.data\" [columns]=\"chart.columns\"\n [options]=\"chart.options\">\n </google-chart>\n </mat-card-content>\n</mat-card>","import { Component, OnInit } from '@angular/core';\nimport { ProductService } from \"../product/product.service\";\nimport moment from \"moment\";\n\n@Component({\n selector: 'app-inventory-dashboard-page',\n templateUrl: './inventory-dashboard-page.component.html',\n styleUrls: ['./inventory-dashboard-page.component.scss']\n})\nexport class InventoryDashboardPageComponent implements OnInit {\n lowStockProductsCount!: number;\n stockReceiptsQtySum!: number;\n stockIssuanceQtySum!: number;\n constructor(\n private productService: ProductService,\n ) { }\n\n ngOnInit(): void {\n this.loadProductSummary();\n }\n\n private loadProductSummary() {\n const params: any = {\n include: 'low_stock_products_count,stock_receipts_quantity_sum,stock_issuances_quantity_sum',\n date_from: moment().startOf('month').format('YYYY-MM-DD'),\n date_to: moment().endOf('month').format('YYYY-MM-DD'),\n }\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n this.lowStockProductsCount = response?.low_stock_products_count;\n this.stockReceiptsQtySum = response?.stock_receipts_quantity_sum;\n this.stockIssuanceQtySum = response?.stock_issuances_quantity_sum;\n }\n });\n }\n}\n","<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;\">\n inventory_2\n </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\">\n arrow_circle_down\n </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\">\n arrow_circle_up\n </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\">{{ stockIssuanceQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\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 class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\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 class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\">\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">On Hand Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n <a class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\">\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\n\nconst routes: Routes = [\n {\n path: \"suppliers\",\n loadChildren: () =>\n import(\"./supplier/supplier.module\").then((m) => m.SupplierModule),\n },\n {\n path: \"measures\",\n loadChildren: () =>\n import(\"./measure/measure.module\").then((mod) => mod.MeasureModule),\n },\n {\n path: \"stock-issuances\",\n loadChildren: () =>\n import(\"./stock-issuances/stock-issuances.module\").then(\n (mod) => mod.StockIssuancesModule\n ),\n },\n {\n path: \"stock-receipts\",\n loadChildren: () =>\n import(\"./stock-receipts/stock-receipts.module\").then(\n (mod) => mod.StockReceiptsModule\n ),\n },\n {\n path: \"categories\",\n loadChildren: () =>\n import(\"./category/category.module\").then((mod) => mod.CategoryModule),\n },\n {\n path: \"products\",\n loadChildren: () =>\n import(\"./product/product.module\").then((mod) => mod.ProductModule),\n },\n {\n path: \"dashboard\",\n component: InventoryDashboardPageComponent,\n },\n {\n path: \"**\",\n redirectTo: \"dashboard\",\n pathMatch: \"full\",\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class InventoryCommonRoutingModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { RouterModule } from \"@angular/router\";\nimport { LowStockProductsWidgetComponent } from './low-stock-products-widget.component';\n\n@NgModule({\n declarations: [LowStockProductsWidgetComponent],\n imports: [\n CommonModule,\n MaterialModule,\n InfiniteScrollModule,\n MatProgressBarModule,\n RouterModule,\n ],\n exports: [LowStockProductsWidgetComponent],\n})\nexport class LowStockProductsWidgetModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { GoogleChartsModule } from \"angular-google-charts\";\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule,\n MatProgressBarModule,\n GoogleChartsModule,\n ],\n})\nexport class ProductSummaryChartModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { InventoryCommonRoutingModule } from \"./inventory-common-routing.module\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { LowStockProductsWidgetModule } from './product/low-stock-products-widget/low-stock-products-widget.module';\nimport { ProductSummaryChartModule } from './product/product-summary-chart/product-summary-chart.module';\nimport { ProductSummaryChartComponent } from './product/product-summary-chart/product-summary-chart.component';\n\n@NgModule({\n declarations: [InventoryDashboardPageComponent],\n imports: [\n CommonModule,\n InventoryCommonRoutingModule,\n MaterialModule,\n LowStockProductsWidgetModule,\n ProductSummaryChartModule,\n ProductSummaryChartComponent\n ],\n})\nexport class InventoryCommonModule { }\n","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"ngx-techlify-core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class StockSummaryService {\n constructor(private httpService: HttpService) {}\n\n /**\n * Get the stocks summary.\n *\n * @param params\n */\n summary(params?: any) {\n return this.httpService.get(\"api/stocks-summary\", { params });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { RequestHelperService, TimelineValue } from \"ngx-techlify-core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { debounceTime, distinctUntilChanged } from \"rxjs\";\nimport moment from \"moment\";\n\n@Component({\n selector: \"app-techlify-filter\",\n templateUrl: \"./techlify-filter.component.html\",\n styleUrls: [\"./techlify-filter.component.scss\"],\n})\nexport class TechlifyFilterComponent implements OnInit {\n @Input() filterForm!: FormGroup;\n @Input() filterConfig: any;\n @Output() filterUpdated: EventEmitter<any> = new EventEmitter();\n\n constructor(\n private requestHelperService: RequestHelperService,\n private activatedRoute: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n // listen for filter changes\n this.filterForm.valueChanges.subscribe({\n next: (value: any) => {\n const params: any = this.requestHelperService.convertToFormData(value);\n this.requestHelperService.updateQueryParams(params);\n },\n });\n\n // update form with query params\n this.requestHelperService.updateFormWithQueryParams(this.filterForm, {\n duration: { number: true },\n expiry_duration: { number: true },\n payment_method_ids: { multiple: true },\n payment_account_ids: { multiple: true },\n project_ids: { multiple: true },\n invoice_status_ids: { multiple: true },\n customer_ids: { multiple: true },\n cost_category_ids: { multiple: true },\n team_member_ids: { multiple: true },\n task_status_ids: { multiple: true },\n asset_account_ids: { multiple: true },\n depreciation_method_ids: { multiple: true },\n depreciation_expense_account_ids: { multiple: true },\n fixed_asset_type_ids: { multiple: true },\n fixed_asset_document_type_ids: { multiple: true },\n service_center_ids: { multiple: true },\n fixed_asset_maintenance_status_ids: { multiple: true },\n milestone_ids: { multiple: true },\n product_ids: { multiple: true },\n supplier_ids: { multiple: true },\n measure_ids: { multiple: true },\n type_ids: { multiple: true },\n fixed_asset_ids: { multiple: true },\n });\n\n // listen for route change\n this.activatedRoute.queryParams\n .pipe(debounceTime(800), distinctUntilChanged())\n .subscribe((val: any) => {\n this.filterUpdated.emit(this.filterForm.value);\n });\n }\n\n resetField(field: string) {\n this.filterForm.get(field)?.setValue(\"\");\n }\n\n onDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue(\n {\n date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n },\n { emitEvent: false }\n );\n }\n\n /**\n * Update expiry date from and date to on value change.\n *\n * @param timelineValue\n */\n onExpiryDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue({\n expiry_date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n expiry_date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n });\n }\n\n /**\n * Get the attribute value for the field.\n *\n * @param attribute\n * @param field\n */\n getFilterConfig(attribute: string, field: string) {\n if (!this.filterConfig) return \"\";\n // Check if the field and attribute exist in the filter config, return the value or an empty string\n return this.filterConfig[field] &&\n this.filterConfig[field][attribute] !== undefined\n ? this.filterConfig[field][attribute]\n : \"\";\n }\n}\n","<form\n [formGroup]=\"filterForm\"\n fxLayout\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n>\n <mat-form-field\n *ngIf=\"filterForm.get('search')\"\n [appearance]=\"getFilterConfig('appearance', 'search')\"\n >\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n matInput\n [placeholder]=\"getFilterConfig('placeholder', 'search')\"\n />\n <button\n *ngIf=\"filterForm.value?.search\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('search')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter\n *ngIf=\"filterForm?.get('duration')\"\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'duration')\"\n [appearance]=\"getFilterConfig('appearance', 'duration')\"\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n ></app-timeline-filter>\n\n <mat-form-field *ngIf=\"filterForm.get('payment_method_ids')\">\n <mat-label>Payment Method</mat-label>\n <app-searchable-selector\n formControlName=\"payment_method_ids\"\n apiUrl=\"api/payment-methods\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_method_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_method_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('payment_account_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['accountingcommon_account.read']\">\n <mat-label>{{\n getFilterConfig(\"label\", \"payment_account_ids\") || \"Payment Account\"\n }}</mat-label>\n <app-searchable-selector\n formControlName=\"payment_account_ids\"\n [apiUrl]=\"\n getFilterConfig('apiUrl', 'payment_account_ids') || 'api/accounts'\n \"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('invoice_status_ids')\">\n <mat-label>Invoice Status</mat-label>\n <app-searchable-selector\n formControlName=\"invoice_status_ids\"\n apiUrl=\"api/invoice-statuses\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.invoice_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('invoice_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('customer_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['customer_read']\">\n <mat-label>Customer</mat-label>\n <app-searchable-selector\n formControlName=\"customer_ids\"\n titleField=\"name\"\n apiUrl=\"api/customers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.customer_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('customer_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n filterForm.get('project_ids') &&\n getFilterConfig('disabled', 'project_ids') === false\n \"\n >\n <mat-form-field *ngxPermissionsOnly=\"['project.read']\">\n <mat-label>Project</mat-label>\n <app-searchable-selector\n formControlName=\"project_ids\"\n apiUrl=\"api/projects\"\n titleField=\"project_name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.project_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('project_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('product_ids')\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_ids\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.product_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('product_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('measure_ids')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n formControlName=\"measure_ids\"\n apiUrl=\"api/product-measures\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.measure_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('measure_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-form-field\n *ngIf=\"filterForm.get('supplier_ids')\"\n [appearance]=\"getFilterConfig('appearance', 'supplier_ids')\"\n >\n <mat-label>Supplier</mat-label>\n <app-searchable-selector\n formControlName=\"supplier_ids\"\n titleField=\"company_name\"\n apiUrl=\"api/suppliers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.supplier_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('supplier_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <app-timeline-filter\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'expiry_duration')\"\n *ngIf=\"filterForm?.get('expiry_duration')\"\n formControlName=\"expiry_duration\"\n (selectionChange)=\"onExpiryDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.expiry_date_from\"\n [dateTo]=\"filterForm.value?.expiry_date_to\"\n ></app-timeline-filter>\n\n <mat-form-field\n *ngIf=\"filterForm.get('cost_category_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Cost Category</mat-label>\n <app-searchable-selector\n formControlName=\"cost_category_ids\"\n apiUrl=\"api/cost-code-categories\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.cost_category_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('cost_category_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('milestone_ids')\" style=\"width: 150px\">\n <mat-label>Milestone</mat-label>\n <app-searchable-selector\n formControlName=\"milestone_ids\"\n apiUrl=\"api/milestones\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.milestone_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('milestone_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('team_member_ids')\">\n <mat-label>Assignee</mat-label>\n <app-searchable-selector\n apiUrl=\"api/persons\"\n formControlName=\"team_member_ids\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.team_member_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('team_member_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-types\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_document_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_document_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-document-types\"\n [multiple]=\"true\"\n [enableSearch]=\"\n getFilterConfig('enableSearch', 'fixed_asset_document_type_ids')\n \"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_document_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_document_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div *ngIf=\"filterForm.get('fixed_asset_document_status')\">\n <small\n class=\"mr-2 text-secondary\"\n *ngIf=\"getFilterConfig('showLabel', 'fixed_asset_document_status')\"\n >\n Status\n </small>\n <mat-button-toggle-group\n formControlName=\"fixed_asset_document_status\"\n [multiple]=\"false\"\n >\n <mat-button-toggle value=\"all\">All</mat-button-toggle>\n <mat-button-toggle value=\"active\">Active</mat-button-toggle>\n <mat-button-toggle value=\"expired\">Expired</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field *ngIf=\"filterForm.get('asset_account_ids')\">\n <mat-label>Asset Account</mat-label>\n <app-searchable-selector\n formControlName=\"asset_account_ids\"\n apiUrl=\"api/accounts\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.asset_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('asset_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_expense_account_ids')\">\n <mat-label>Depreciation Expense Account</mat-label>\n <app-searchable-selector\n [multiple]=\"true\"\n apiUrl=\"api/accounts\"\n formControlName=\"depreciation_expense_account_ids\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.depreciation_expense_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('depreciation_expense_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_method_ids')\">\n <mat-label>Depreciation Method</mat-label>\n <app-searchable-selector\n formControlName=\"depreciation_method_ids\"\n apiUrl=\"api/accounting-plus/depreciation-methods\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n (click)=\"resetField('depreciation_method_ids')\"\n *ngIf=\"filterForm.value?.depreciation_method_ids\"\n mat-icon-button\n matSuffix\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"filterForm.get('task_status_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/task-statuses\"\n formControlName=\"task_status_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.task_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('task_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('service_center_ids')\">\n <mat-label>Service Center</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/service-centers\"\n formControlName=\"service_center_ids\"\n titleField=\"name\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.service_center_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('service_center_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_maintenance_status_ids')\">\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-asset-maintenance-statuses\"\n formControlName=\"fixed_asset_maintenance_status_ids\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_maintenance_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_maintenance_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('group_by')\">\n <mat-label>Group By</mat-label>\n <mat-select formControlName=\"group_by\">\n <mat-option value=\"week\">Week</mat-option>\n <mat-option value=\"month\">Month</mat-option>\n <mat-option value=\"year\">Year</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TechlifyFilterComponent } from \"./techlify-filter.component\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { FlexLayoutModule } from \"@angular/flex-layout\";\nimport {\n MaterialModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n} from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [TechlifyFilterComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n MaterialModule,\n ],\n exports: [TechlifyFilterComponent],\n})\nexport class TechlifyFilterModule {}\n","/*\n * Public API Surface of inventory-common\n */\n\nexport * from './lib/inventory-common/inventory-common-routing.module';\nexport * from './lib/inventory-common/inventory-common.module';\nexport * from './lib/inventory-common/stock-summary.service';\n\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.module';\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ProductService","i2","i4","i5","i4.LowStockProductsWidgetComponent","i5.ProductSummaryChartComponent","i6","i3","i7","i8","i9","i10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"techlify-inventory-common-techlify-inventory-common-GFYF7JCA.mjs","sources":["../../../projects/inventory-common/src/lib/inventory-common/product/product.service.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.component.html","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-dashboard-page/inventory-dashboard-page.component.html","../../../projects/inventory-common/src/lib/inventory-common/inventory-common-routing.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/low-stock-products-widget/low-stock-products-widget.module.ts","../../../projects/inventory-common/src/lib/inventory-common/product/product-summary-chart/product-summary-chart.module.ts","../../../projects/inventory-common/src/lib/inventory-common/inventory-common.module.ts","../../../projects/inventory-common/src/lib/inventory-common/stock-summary.service.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.component.ts","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.component.html","../../../projects/inventory-common/src/lib/inventory-common/techlify-filter/techlify-filter.module.ts","../../../projects/inventory-common/src/public-api.ts","../../../projects/inventory-common/src/techlify-inventory-common.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport {\n DataManager,\n HttpService,\n TechlifyServiceBaseClass,\n} from \"ngx-techlify-core\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class ProductService extends TechlifyServiceBaseClass {\n constructor(\n private dataManager: DataManager,\n public httpService: HttpService\n ) {\n super(httpService, \"products\");\n }\n\n getProducts(filters?: any) {\n return this.dataManager.GET(`api/products`, filters);\n }\n\n getProduct(id: any) {\n return this.dataManager.GET(`api/products/${id}`);\n }\n\n createProduct(model: any) {\n return this.dataManager.POST(`api/products`, model);\n }\n\n updateProducts(model: any) {\n return this.dataManager.PUT(`api/products/${model.id}`, model);\n }\n deleteProduct(id: any) {\n return this.dataManager.DELETE(`api/products/${id}`);\n }\n\n getProductMeasures(filters?: any) {\n return this.dataManager.GET(`api/product-measures`, filters);\n }\n\n createProductMeasure(model: any) {\n return this.dataManager.POST(`api/product-measures`, model);\n }\n\n updateProductMeasure(model: any) {\n return this.dataManager.PUT(`api/product-measures/${model.id}`, model);\n }\n\n summary(params?: any): Observable<any> {\n return this.httpService.get(\"api/products-summary\", { params });\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { TechlifyListingControllerInterface } from \"ngx-techlify-core\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: \"app-low-stock-products-widget\",\n templateUrl: \"./low-stock-products-widget.component.html\",\n})\nexport class LowStockProductsWidgetComponent\n extends TechlifyListingControllerInterface\n implements OnInit\n{\n displayedColumns: string[] = [\"#\", \"Product\", \"Stock\", \"Reorder Point\"];\n\n constructor(private productService: ProductService) {\n super();\n this.lastPage = 0;\n this.perPage = 1000;\n }\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n page: this.page,\n perPage: this.perPage,\n is_low_stock: true,\n num_items: this.perPage + \"|\" + this.page,\n };\n this.isWorking = true;\n this.productService.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models?.concat(response?.data);\n this.lastPage = response?.last_page;\n this.isWorking = false;\n },\n error: () => (this.isWorking = false),\n });\n }\n}\n","<mat-card style=\"max-height: 460px; overflow: auto\">\n <mat-card-content>\n <h3>Low Stock Products</h3>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef>Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a\n [routerLink]=\"['/inventory/products', element?.id, 'view']\"\n class=\"text-dark\"\n >\n {{ element?.name }}\n </a>\n </td>\n </ng-container>\n\n <!-- Stock Column -->\n <ng-container matColumnDef=\"Stock\">\n <th mat-header-cell *matHeaderCellDef>Stock</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.current_stock }}</td>\n </ng-container>\n\n <!-- Reorder Point Column -->\n <ng-container matColumnDef=\"Reorder Point\">\n <th mat-header-cell *matHeaderCellDef>Reorder Point</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.reorder_point }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n\n <!-- <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>-->\n </mat-card-content>\n</mat-card>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatCard, MatCardContent } from \"@angular/material/card\";\nimport { ChartType, GoogleChartsModule } from \"angular-google-charts\";\nimport { MatProgressBar } from \"@angular/material/progress-bar\";\nimport { NgIf } from \"@angular/common\";\nimport { ProductService } from \"../product.service\";\n\n@Component({\n selector: 'app-product-summary-chart',\n standalone: true,\n imports: [\n MatCard,\n MatCardContent,\n GoogleChartsModule,\n MatProgressBar,\n NgIf\n ],\n templateUrl: './product-summary-chart.component.html',\n styleUrl: './product-summary-chart.component.scss'\n})\nexport class ProductSummaryChartComponent implements OnInit {\n @Input() height: number = 400;\n @Input() title = 'Product Summary';\n\n constructor(\n private productService: ProductService\n ) {\n }\n\n chart: any = {\n title: 'Pie Chart',\n type: ChartType.PieChart,\n data: [],\n options: {\n pieSliceText: 'value'\n }\n };\n isLoading: boolean = false;\n\n ngOnInit() {\n this.loadData();\n }\n\n loadData() {\n const params: any = {\n include: 'products_aggregated',\n group_by: 'category_id',\n }\n this.isLoading = true;\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n let data: any[] = [];\n response?.products_aggregated?.forEach((item: any) => {\n data.push([item?.title, item?.product_count]);\n })\n this.chart.data = data;\n this.isLoading = false;\n },\n error: () => (this.isLoading = false)\n });\n }\n}\n","<mat-card>\n <mat-card-content>\n <h3>{{ title }}</h3>\n </mat-card-content>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n <mat-card-content *ngIf=\"chart.data?.length > 0\">\n <google-chart class=\"w-100\" [height]=\"height\" [type]=\"chart.type\" [data]=\"chart.data\" [columns]=\"chart.columns\"\n [options]=\"chart.options\">\n </google-chart>\n </mat-card-content>\n</mat-card>","import { Component, OnInit } from '@angular/core';\nimport { ProductService } from \"../product/product.service\";\nimport moment from \"moment\";\n\n@Component({\n selector: 'app-inventory-dashboard-page',\n templateUrl: './inventory-dashboard-page.component.html',\n styleUrls: ['./inventory-dashboard-page.component.scss']\n})\nexport class InventoryDashboardPageComponent implements OnInit {\n lowStockProductsCount!: number;\n stockReceiptsQtySum!: number;\n stockIssuanceQtySum!: number;\n constructor(\n private productService: ProductService,\n ) { }\n\n ngOnInit(): void {\n this.loadProductSummary();\n }\n\n private loadProductSummary() {\n const params: any = {\n include: 'low_stock_products_count,stock_receipts_quantity_sum,stock_issuances_quantity_sum',\n date_from: moment().startOf('month').format('YYYY-MM-DD'),\n date_to: moment().endOf('month').format('YYYY-MM-DD'),\n }\n this.productService.summary(params).subscribe({\n next: (response: any) => {\n this.lowStockProductsCount = response?.low_stock_products_count;\n this.stockReceiptsQtySum = response?.stock_receipts_quantity_sum;\n this.stockIssuanceQtySum = response?.stock_issuances_quantity_sum;\n }\n });\n }\n}\n","<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;\">\n inventory_2\n </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\">\n arrow_circle_down\n </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\">\n arrow_circle_up\n </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\">{{ stockIssuanceQtySum | number }}</h1>\n </div>\n </mat-card-content>\n </mat-card>\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 class=\"col-lg-6 mb-3\">\n <app-low-stock-products-widget></app-low-stock-products-widget>\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 class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\">\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">On Hand Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n <a class=\"d-flex justify-content-start align-items-center gap-2 text-decoration-none text-dark cursor-pointer\">\n <span class=\"material-symbols-outlined fs-3\">\n description\n </span>\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <span class=\"material-symbols-outlined\">\n chevron_forward\n </span>\n </a>\n </mat-card-content>\n </mat-card>\n </div>\n</div>","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\n\nconst routes: Routes = [\n {\n path: \"suppliers\",\n loadChildren: () =>\n import(\"./supplier/supplier.module\").then((m) => m.SupplierModule),\n },\n {\n path: \"measures\",\n loadChildren: () =>\n import(\"./measure/measure.module\").then((mod) => mod.MeasureModule),\n },\n {\n path: \"stock-issuances\",\n loadChildren: () =>\n import(\"./stock-issuances/stock-issuances.module\").then(\n (mod) => mod.StockIssuancesModule\n ),\n },\n {\n path: \"stock-receipts\",\n loadChildren: () =>\n import(\"./stock-receipts/stock-receipts.module\").then(\n (mod) => mod.StockReceiptsModule\n ),\n },\n {\n path: \"categories\",\n loadChildren: () =>\n import(\"./category/category.module\").then((mod) => mod.CategoryModule),\n },\n {\n path: \"products\",\n loadChildren: () =>\n import(\"./product/product.module\").then((mod) => mod.ProductModule),\n },\n {\n path: \"dashboard\",\n component: InventoryDashboardPageComponent,\n },\n {\n path: \"**\",\n redirectTo: \"dashboard\",\n pathMatch: \"full\",\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class InventoryCommonRoutingModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { RouterModule } from \"@angular/router\";\nimport { LowStockProductsWidgetComponent } from './low-stock-products-widget.component';\n\n@NgModule({\n declarations: [LowStockProductsWidgetComponent],\n imports: [\n CommonModule,\n MaterialModule,\n InfiniteScrollModule,\n MatProgressBarModule,\n RouterModule,\n ],\n exports: [LowStockProductsWidgetComponent],\n})\nexport class LowStockProductsWidgetModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { GoogleChartsModule } from \"angular-google-charts\";\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule,\n MatProgressBarModule,\n GoogleChartsModule,\n ],\n})\nexport class ProductSummaryChartModule {}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { InventoryCommonRoutingModule } from \"./inventory-common-routing.module\";\nimport { InventoryDashboardPageComponent } from \"./inventory-dashboard-page/inventory-dashboard-page.component\";\nimport { MaterialModule } from \"ngx-techlify-core\";\nimport { LowStockProductsWidgetModule } from './product/low-stock-products-widget/low-stock-products-widget.module';\nimport { ProductSummaryChartModule } from './product/product-summary-chart/product-summary-chart.module';\nimport { ProductSummaryChartComponent } from './product/product-summary-chart/product-summary-chart.component';\n\n@NgModule({\n declarations: [InventoryDashboardPageComponent],\n imports: [\n CommonModule,\n InventoryCommonRoutingModule,\n MaterialModule,\n LowStockProductsWidgetModule,\n ProductSummaryChartModule,\n ProductSummaryChartComponent\n ],\n})\nexport class InventoryCommonModule { }\n","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"ngx-techlify-core\";\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class StockSummaryService {\n constructor(private httpService: HttpService) {}\n\n /**\n * Get the stocks summary.\n *\n * @param params\n */\n summary(params?: any) {\n return this.httpService.get(\"api/stocks-summary\", { params });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormGroup } from \"@angular/forms\";\nimport { RequestHelperService, TimelineValue } from \"ngx-techlify-core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { debounceTime, distinctUntilChanged } from \"rxjs\";\nimport moment from \"moment\";\n\n@Component({\n selector: \"app-techlify-filter\",\n templateUrl: \"./techlify-filter.component.html\",\n styleUrls: [\"./techlify-filter.component.scss\"],\n})\nexport class TechlifyFilterComponent implements OnInit {\n @Input() filterForm!: FormGroup;\n @Input() filterConfig: any;\n @Output() filterUpdated: EventEmitter<any> = new EventEmitter();\n\n constructor(\n private requestHelperService: RequestHelperService,\n private activatedRoute: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n // listen for filter changes\n this.filterForm.valueChanges.subscribe({\n next: (value: any) => {\n const params: any = this.requestHelperService.convertToFormData(value);\n this.requestHelperService.updateQueryParams(params);\n },\n });\n\n // update form with query params\n this.requestHelperService.updateFormWithQueryParams(this.filterForm, {\n duration: { number: true },\n expiry_duration: { number: true },\n payment_method_ids: { multiple: true },\n payment_account_ids: { multiple: true },\n project_ids: { multiple: true },\n invoice_status_ids: { multiple: true },\n customer_ids: { multiple: true },\n cost_category_ids: { multiple: true },\n team_member_ids: { multiple: true },\n task_status_ids: { multiple: true },\n asset_account_ids: { multiple: true },\n depreciation_method_ids: { multiple: true },\n depreciation_expense_account_ids: { multiple: true },\n fixed_asset_type_ids: { multiple: true },\n fixed_asset_document_type_ids: { multiple: true },\n service_center_ids: { multiple: true },\n fixed_asset_maintenance_status_ids: { multiple: true },\n milestone_ids: { multiple: true },\n product_ids: { multiple: true },\n supplier_ids: { multiple: true },\n measure_ids: { multiple: true },\n type_ids: { multiple: true },\n fixed_asset_ids: { multiple: true },\n });\n\n // listen for route change\n this.activatedRoute.queryParams\n .pipe(debounceTime(800), distinctUntilChanged())\n .subscribe((val: any) => {\n this.filterUpdated.emit(this.filterForm.value);\n });\n }\n\n resetField(field: string) {\n this.filterForm.get(field)?.setValue(\"\");\n }\n\n onDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue(\n {\n date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n },\n { emitEvent: false }\n );\n }\n\n /**\n * Update expiry date from and date to on value change.\n *\n * @param timelineValue\n */\n onExpiryDurationChange(timelineValue: TimelineValue) {\n let { date_to, date_from } = timelineValue;\n this.filterForm.patchValue({\n expiry_date_from: date_from ? moment(date_from).format(\"YYYY-MM-DD\") : \"\",\n expiry_date_to: date_to ? moment(date_to).format(\"YYYY-MM-DD\") : \"\",\n });\n }\n\n /**\n * Get the attribute value for the field.\n *\n * @param attribute\n * @param field\n */\n getFilterConfig(attribute: string, field: string) {\n if (!this.filterConfig) return \"\";\n // Check if the field and attribute exist in the filter config, return the value or an empty string\n return this.filterConfig[field] &&\n this.filterConfig[field][attribute] !== undefined\n ? this.filterConfig[field][attribute]\n : \"\";\n }\n}\n","<form\n [formGroup]=\"filterForm\"\n fxLayout\n fxLayoutAlign=\"start center\"\n fxLayoutGap=\"10px\"\n>\n <mat-form-field\n *ngIf=\"filterForm.get('search')\"\n [appearance]=\"getFilterConfig('appearance', 'search')\"\n >\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n matInput\n [placeholder]=\"getFilterConfig('placeholder', 'search')\"\n />\n <button\n *ngIf=\"filterForm.value?.search\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('search')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter\n *ngIf=\"filterForm?.get('duration')\"\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'duration')\"\n [appearance]=\"getFilterConfig('appearance', 'duration')\"\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n ></app-timeline-filter>\n\n <mat-form-field *ngIf=\"filterForm.get('payment_method_ids')\">\n <mat-label>Payment Method</mat-label>\n <app-searchable-selector\n formControlName=\"payment_method_ids\"\n apiUrl=\"api/payment-methods\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_method_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_method_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('payment_account_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['accountingcommon_account.read']\">\n <mat-label>{{\n getFilterConfig(\"label\", \"payment_account_ids\") || \"Payment Account\"\n }}</mat-label>\n <app-searchable-selector\n formControlName=\"payment_account_ids\"\n [apiUrl]=\"\n getFilterConfig('apiUrl', 'payment_account_ids') || 'api/accounts'\n \"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.payment_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('payment_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('invoice_status_ids')\">\n <mat-label>Invoice Status</mat-label>\n <app-searchable-selector\n formControlName=\"invoice_status_ids\"\n apiUrl=\"api/invoice-statuses\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.invoice_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('invoice_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"filterForm.get('customer_ids')\">\n <mat-form-field *ngxPermissionsOnly=\"['customer_read']\">\n <mat-label>Customer</mat-label>\n <app-searchable-selector\n formControlName=\"customer_ids\"\n titleField=\"name\"\n apiUrl=\"api/customers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.customer_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('customer_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n filterForm.get('project_ids') &&\n getFilterConfig('disabled', 'project_ids') === false\n \"\n >\n <mat-form-field *ngxPermissionsOnly=\"['project.read']\">\n <mat-label>Project</mat-label>\n <app-searchable-selector\n formControlName=\"project_ids\"\n apiUrl=\"api/projects\"\n titleField=\"project_name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.project_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('project_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <mat-form-field *ngIf=\"filterForm.get('product_ids')\">\n <mat-label>Product</mat-label>\n <app-searchable-selector\n formControlName=\"product_ids\"\n apiUrl=\"api/products\"\n titleField=\"name\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.product_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('product_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('measure_ids')\">\n <mat-label>Measure</mat-label>\n <app-searchable-selector\n formControlName=\"measure_ids\"\n apiUrl=\"api/product-measures\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.measure_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('measure_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngxPermissionsOnly=\"['supplier.read']\">\n <mat-form-field\n *ngIf=\"filterForm.get('supplier_ids')\"\n [appearance]=\"getFilterConfig('appearance', 'supplier_ids')\"\n >\n <mat-label>Supplier</mat-label>\n <app-searchable-selector\n formControlName=\"supplier_ids\"\n titleField=\"company_name\"\n apiUrl=\"api/suppliers\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.supplier_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('supplier_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n\n <app-timeline-filter\n appearance=\"fill\"\n [labelText]=\"getFilterConfig('label', 'expiry_duration')\"\n *ngIf=\"filterForm?.get('expiry_duration')\"\n formControlName=\"expiry_duration\"\n (selectionChange)=\"onExpiryDurationChange($event)\"\n [showClearButton]=\"true\"\n [dateFrom]=\"filterForm.value?.expiry_date_from\"\n [dateTo]=\"filterForm.value?.expiry_date_to\"\n ></app-timeline-filter>\n\n <mat-form-field\n *ngIf=\"filterForm.get('cost_category_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Cost Category</mat-label>\n <app-searchable-selector\n formControlName=\"cost_category_ids\"\n apiUrl=\"api/cost-code-categories\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.cost_category_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('cost_category_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('milestone_ids')\" style=\"width: 150px\">\n <mat-label>Milestone</mat-label>\n <app-searchable-selector\n formControlName=\"milestone_ids\"\n apiUrl=\"api/milestones\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.milestone_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('milestone_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('team_member_ids')\">\n <mat-label>Assignee</mat-label>\n <app-searchable-selector\n apiUrl=\"api/persons\"\n formControlName=\"team_member_ids\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.team_member_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('team_member_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-types\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_document_type_ids')\">\n <mat-label>Type</mat-label>\n <app-searchable-selector\n formControlName=\"fixed_asset_document_type_ids\"\n apiUrl=\"api/accounting-plus/fixed-asset-document-types\"\n [multiple]=\"true\"\n [enableSearch]=\"\n getFilterConfig('enableSearch', 'fixed_asset_document_type_ids')\n \"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_document_type_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_document_type_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div *ngIf=\"filterForm.get('fixed_asset_document_status')\">\n <small\n class=\"mr-2 text-secondary\"\n *ngIf=\"getFilterConfig('showLabel', 'fixed_asset_document_status')\"\n >\n Status\n </small>\n <mat-button-toggle-group\n formControlName=\"fixed_asset_document_status\"\n [multiple]=\"false\"\n >\n <mat-button-toggle value=\"all\">All</mat-button-toggle>\n <mat-button-toggle value=\"active\">Active</mat-button-toggle>\n <mat-button-toggle value=\"expired\">Expired</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field *ngIf=\"filterForm.get('asset_account_ids')\">\n <mat-label>Asset Account</mat-label>\n <app-searchable-selector\n formControlName=\"asset_account_ids\"\n apiUrl=\"api/accounts\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.asset_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('asset_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_expense_account_ids')\">\n <mat-label>Depreciation Expense Account</mat-label>\n <app-searchable-selector\n [multiple]=\"true\"\n apiUrl=\"api/accounts\"\n formControlName=\"depreciation_expense_account_ids\"\n ></app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.depreciation_expense_account_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('depreciation_expense_account_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('depreciation_method_ids')\">\n <mat-label>Depreciation Method</mat-label>\n <app-searchable-selector\n formControlName=\"depreciation_method_ids\"\n apiUrl=\"api/accounting-plus/depreciation-methods\"\n [multiple]=\"true\"\n ></app-searchable-selector>\n <button\n (click)=\"resetField('depreciation_method_ids')\"\n *ngIf=\"filterForm.value?.depreciation_method_ids\"\n mat-icon-button\n matSuffix\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"filterForm.get('task_status_ids')\"\n style=\"width: 150px\"\n >\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/task-statuses\"\n formControlName=\"task_status_ids\"\n titleField=\"title\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.task_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('task_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('service_center_ids')\">\n <mat-label>Service Center</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/service-centers\"\n formControlName=\"service_center_ids\"\n titleField=\"name\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.service_center_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('service_center_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('fixed_asset_maintenance_status_ids')\">\n <mat-label>Status</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-asset-maintenance-statuses\"\n formControlName=\"fixed_asset_maintenance_status_ids\"\n [multiple]=\"true\"\n [enableSearch]=\"false\"\n >\n </app-searchable-selector>\n <button\n *ngIf=\"filterForm.value?.fixed_asset_maintenance_status_ids\"\n mat-icon-button\n matSuffix\n (click)=\"resetField('fixed_asset_maintenance_status_ids')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"filterForm.get('group_by')\">\n <mat-label>Group By</mat-label>\n <mat-select formControlName=\"group_by\">\n <mat-option value=\"week\">Week</mat-option>\n <mat-option value=\"month\">Month</mat-option>\n <mat-option value=\"year\">Year</mat-option>\n </mat-select>\n </mat-form-field>\n</form>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TechlifyFilterComponent } from \"./techlify-filter.component\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { FlexLayoutModule } from \"@angular/flex-layout\";\nimport {\n MaterialModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n} from \"ngx-techlify-core\";\n\n@NgModule({\n declarations: [TechlifyFilterComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n SearchableSelectorModule,\n TimelineFilterModule,\n MaterialModule,\n ],\n exports: [TechlifyFilterComponent],\n})\nexport class TechlifyFilterModule {}\n","/*\n * Public API Surface of inventory-common\n */\n\nexport * from './lib/inventory-common/inventory-common-routing.module';\nexport * from './lib/inventory-common/inventory-common.module';\nexport * from './lib/inventory-common/stock-summary.service';\n\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.module';\nexport * from './lib/inventory-common/techlify-filter/techlify-filter.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ProductService","i2","i4","i5","i4.LowStockProductsWidgetComponent","i5.ProductSummaryChartComponent","i6","i3","i7","i8","i9","i10"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { b as InventoryCommonModule, I as InventoryCommonRoutingModule, S as StockSummaryService, T as TechlifyFilterComponent, a as TechlifyFilterModule } from './techlify-inventory-common-techlify-inventory-common-
|
|
1
|
+
export { b as InventoryCommonModule, I as InventoryCommonRoutingModule, S as StockSummaryService, T as TechlifyFilterComponent, a as TechlifyFilterModule } from './techlify-inventory-common-techlify-inventory-common-GFYF7JCA.mjs';
|
|
2
2
|
//# sourceMappingURL=techlify-inventory-common.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { OnInit } from "@angular/core";
|
|
2
|
-
import { FormBuilder,
|
|
2
|
+
import { FormBuilder, FormGroup } from "@angular/forms";
|
|
3
3
|
import { MatDialog } from "@angular/material/dialog";
|
|
4
4
|
import { MatTableDataSource } from "@angular/material/table";
|
|
5
5
|
import { ActivatedRoute } from "@angular/router";
|
|
6
|
-
import { RequestHelperService } from "ngx-techlify-core";
|
|
6
|
+
import { ColumnConfig, RequestHelperService } from "ngx-techlify-core";
|
|
7
7
|
import { ProductService } from "../product.service";
|
|
8
8
|
import { ProductFormService } from "../product-form.service";
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
@@ -25,11 +25,9 @@ export declare class ProductListComponent implements OnInit {
|
|
|
25
25
|
products: any[];
|
|
26
26
|
dataSource: MatTableDataSource<unknown, import("@angular/material/paginator").MatPaginator>;
|
|
27
27
|
isLoading: boolean;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}[];
|
|
32
|
-
displayedColumns: FormControl;
|
|
28
|
+
columnConfig: ColumnConfig[];
|
|
29
|
+
selectedColumns: ColumnConfig[];
|
|
30
|
+
get displayedColumns(): string[];
|
|
33
31
|
importId: number;
|
|
34
32
|
constructor(fb: FormBuilder, dialog: MatDialog, activatedRoute: ActivatedRoute, productService: ProductService, requestHelperService: RequestHelperService, productFormService: ProductFormService);
|
|
35
33
|
ngOnInit(): void;
|
|
@@ -23,6 +23,6 @@ import * as i21 from "@angular/flex-layout";
|
|
|
23
23
|
import * as i22 from "@angular/forms";
|
|
24
24
|
export declare class ProductModule {
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<ProductModule, never>;
|
|
26
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ProductModule, [typeof i1.ProductListComponent, typeof i2.ProductFormComponent, typeof i3.ProductNavBarComponent, typeof i4.ProductMeasuresListComponent, typeof i5.ProductMeasureFormComponent, typeof i6.ProductViewPageComponent, typeof i7.ProductFormButtonComponent, typeof i8.ProductDeleteButtonComponent, typeof i9.ProductBasicInfoComponent, typeof i10.ProductImportPageComponent], [typeof i11.CommonModule, typeof i12.ProductRoutingModule, typeof i13.SearchableSelectorModule, typeof i13.TimelineFilterModule, typeof i14.StockReceiptFormModule, typeof i15.StockIssueFormModule, typeof i13.ImportCsvModule, typeof i16.StockReceiptsModule, typeof i17.StockIssuancesListModule, typeof i18.ProductTaxModule, typeof i13.MaterialModule, typeof i19.MatProgressBarModule, typeof i20.InfiniteScrollModule, typeof i21.FlexModule, typeof i22.ReactiveFormsModule, typeof i22.FormsModule], [typeof i2.ProductFormComponent, typeof i9.ProductBasicInfoComponent, typeof i7.ProductFormButtonComponent]>;
|
|
26
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ProductModule, [typeof i1.ProductListComponent, typeof i2.ProductFormComponent, typeof i3.ProductNavBarComponent, typeof i4.ProductMeasuresListComponent, typeof i5.ProductMeasureFormComponent, typeof i6.ProductViewPageComponent, typeof i7.ProductFormButtonComponent, typeof i8.ProductDeleteButtonComponent, typeof i9.ProductBasicInfoComponent, typeof i10.ProductImportPageComponent], [typeof i11.CommonModule, typeof i12.ProductRoutingModule, typeof i13.SearchableSelectorModule, typeof i13.TimelineFilterModule, typeof i14.StockReceiptFormModule, typeof i15.StockIssueFormModule, typeof i13.ImportCsvModule, typeof i16.StockReceiptsModule, typeof i17.StockIssuancesListModule, typeof i18.ProductTaxModule, typeof i13.MaterialModule, typeof i19.MatProgressBarModule, typeof i20.InfiniteScrollModule, typeof i21.FlexModule, typeof i22.ReactiveFormsModule, typeof i22.FormsModule, typeof i13.ColumnSelectorModule], [typeof i2.ProductFormComponent, typeof i9.ProductBasicInfoComponent, typeof i7.ProductFormButtonComponent]>;
|
|
27
27
|
static ɵinj: i0.ɵɵInjectorDeclaration<ProductModule>;
|
|
28
28
|
}
|
|
@@ -11,8 +11,9 @@ import * as i9 from "ngx-techlify-core";
|
|
|
11
11
|
import * as i10 from "@angular/flex-layout";
|
|
12
12
|
import * as i11 from "@angular/forms";
|
|
13
13
|
import * as i12 from "ngx-infinite-scroll";
|
|
14
|
+
import * as i13 from "ngx-permissions";
|
|
14
15
|
export declare class SupplierModule {
|
|
15
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<SupplierModule, never>;
|
|
16
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<SupplierModule, [typeof i1.SupplierComponent, typeof i2.SupplierViewComponent, typeof i3.SuppliersListComponent, typeof i4.SupplierFormComponent, typeof i5.SupplierInformationComponent], [typeof i6.CommonModule, typeof i7.SupplierRoutingModule, typeof i8.MaterialModule, typeof i9.SearchableSelectorModule, typeof i9.AuditLogForModelModule, typeof i9.NoteModule, typeof i10.FlexModule, typeof i11.ReactiveFormsModule, typeof i12.InfiniteScrollModule], never>;
|
|
17
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SupplierModule, [typeof i1.SupplierComponent, typeof i2.SupplierViewComponent, typeof i3.SuppliersListComponent, typeof i4.SupplierFormComponent, typeof i5.SupplierInformationComponent], [typeof i6.CommonModule, typeof i7.SupplierRoutingModule, typeof i8.MaterialModule, typeof i9.SearchableSelectorModule, typeof i9.AuditLogForModelModule, typeof i9.NoteModule, typeof i10.FlexModule, typeof i11.ReactiveFormsModule, typeof i12.InfiniteScrollModule, typeof i13.NgxPermissionsModule], never>;
|
|
17
18
|
static ɵinj: i0.ɵɵInjectorDeclaration<SupplierModule>;
|
|
18
19
|
}
|
|
@@ -1,43 +1,30 @@
|
|
|
1
|
-
import { OnInit } from
|
|
2
|
-
import {
|
|
3
|
-
import { MatDialog } from
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { SupplierService } from "../supplier.service";
|
|
10
|
-
import { SupplierFormService } from "../supplier-form/supplier-form.service";
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { FormBuilder } from '@angular/forms';
|
|
3
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
4
|
+
import { ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { NgxSpinnerService } from 'ngx-spinner';
|
|
6
|
+
import { AlertService, ErrorHandlerService, FilterService, RequestHelperService, TechlifyListingControllerInterface } from 'ngx-techlify-core';
|
|
7
|
+
import { SupplierService } from '../supplier.service';
|
|
8
|
+
import { SupplierFormService } from '../supplier-form/supplier-form.service';
|
|
11
9
|
import * as i0 from "@angular/core";
|
|
12
10
|
export declare class SuppliersListComponent extends TechlifyListingControllerInterface implements OnInit {
|
|
13
11
|
private spinner;
|
|
14
12
|
private fb;
|
|
15
13
|
private supplierService;
|
|
16
|
-
private supplierTypeService;
|
|
17
14
|
private errorHandler;
|
|
18
15
|
private filterService;
|
|
19
16
|
private activatedRoute;
|
|
20
17
|
private alertService;
|
|
21
18
|
private dialog;
|
|
22
19
|
private supplierFormService;
|
|
20
|
+
private requestHelperService;
|
|
23
21
|
displayedColumns: string[];
|
|
24
|
-
|
|
25
|
-
dataSource: MatTableDataSource<unknown, import("@angular/material/paginator").MatPaginator>;
|
|
26
|
-
totalItems: number;
|
|
27
|
-
currentPage: number;
|
|
28
|
-
routeFilters: any;
|
|
29
|
-
supplierTypes: any;
|
|
30
|
-
isLoading: boolean;
|
|
31
|
-
constructor(spinner: NgxSpinnerService, fb: FormBuilder, supplierService: SupplierService, supplierTypeService: SupplierTypeService, errorHandler: ErrorHandlerService, filterService: FilterService, activatedRoute: ActivatedRoute, alertService: AlertService, dialog: MatDialog, supplierFormService: SupplierFormService);
|
|
22
|
+
constructor(spinner: NgxSpinnerService, fb: FormBuilder, supplierService: SupplierService, errorHandler: ErrorHandlerService, filterService: FilterService, activatedRoute: ActivatedRoute, alertService: AlertService, dialog: MatDialog, supplierFormService: SupplierFormService, requestHelperService: RequestHelperService);
|
|
32
23
|
ngOnInit(): void;
|
|
33
24
|
listenForChanges(): void;
|
|
34
|
-
patchFiltersFromRoute(): void;
|
|
35
25
|
sortColumn(event: any): void;
|
|
36
|
-
assignFilter(column: any, direction: any):
|
|
37
|
-
getSupplierTypes(): Promise<void>;
|
|
26
|
+
assignFilter(column: any, direction: any): any;
|
|
38
27
|
loadData(): Promise<void>;
|
|
39
|
-
reload(): void;
|
|
40
|
-
onScroll(): void;
|
|
41
28
|
editForm(model?: any): void;
|
|
42
29
|
deleteForm(supplier: any): void;
|
|
43
30
|
/**
|
|
@@ -46,6 +33,9 @@ export declare class SuppliersListComponent extends TechlifyListingControllerInt
|
|
|
46
33
|
* @param model
|
|
47
34
|
*/
|
|
48
35
|
showAddSupplierDialog(model?: any): void;
|
|
36
|
+
private updateFormWithQueryParams;
|
|
37
|
+
private subscribeToFormChanges;
|
|
38
|
+
private subscribeToRouteChanges;
|
|
49
39
|
static ɵfac: i0.ɵɵFactoryDeclaration<SuppliersListComponent, never>;
|
|
50
40
|
static ɵcmp: i0.ɵɵComponentDeclaration<SuppliersListComponent, "app-suppliers-list", never, {}, {}, never, never, false, never>;
|
|
51
41
|
}
|
package/package.json
CHANGED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "ngx-techlify-core";
|
|
4
|
-
export class SupplierTypeService {
|
|
5
|
-
httpService;
|
|
6
|
-
constructor(httpService) {
|
|
7
|
-
this.httpService = httpService;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* get all suppliers from API
|
|
11
|
-
*
|
|
12
|
-
*/
|
|
13
|
-
index() {
|
|
14
|
-
return this.httpService.get(`api/supplier-types`);
|
|
15
|
-
}
|
|
16
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, providedIn: "root" });
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SupplierTypeService, decorators: [{
|
|
20
|
-
type: Injectable,
|
|
21
|
-
args: [{
|
|
22
|
-
providedIn: "root",
|
|
23
|
-
}]
|
|
24
|
-
}], ctorParameters: () => [{ type: i1.HttpService }] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcGxpZXItdHlwZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52ZW50b3J5LWNvbW1vbi9zcmMvbGliL2ludmVudG9yeS1jb21tb24vc3VwcGxpZXIvc3VwcGxpZXItdHlwZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8sbUJBQW1CO0lBQ1Y7SUFBcEIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRWhEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEQsQ0FBQzt3R0FUVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gXCJuZ3gtdGVjaGxpZnktY29yZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBTdXBwbGllclR5cGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIGdldCBhbGwgc3VwcGxpZXJzIGZyb20gQVBJXG4gICAqXG4gICAqL1xuICBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQoYGFwaS9zdXBwbGllci10eXBlc2ApO1xuICB9XG59XG4iXX0=
|