tin-spa 20.1.2 → 20.2.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/fesm2022/tin-spa.mjs +1004 -493
- package/fesm2022/tin-spa.mjs.map +1 -1
- package/index.d.ts +219 -183
- package/package.json +1 -1
- package/src/tin-styles.css +1 -0
package/fesm2022/tin-spa.mjs
CHANGED
|
@@ -19,7 +19,7 @@ import { RouterModule, Router } from '@angular/router';
|
|
|
19
19
|
import * as i2$1 from '@abacritt/angularx-social-login';
|
|
20
20
|
import { SocialLoginModule } from '@abacritt/angularx-social-login';
|
|
21
21
|
import * as i1$1 from '@angular/common/http';
|
|
22
|
-
import { HttpHeaders, HttpResponse,
|
|
22
|
+
import { HttpHeaders, HttpResponse, HttpClientModule, HTTP_INTERCEPTORS, HttpClient } from '@angular/common/http';
|
|
23
23
|
import * as i1$3 from '@angular/cdk/layout';
|
|
24
24
|
import * as i9 from '@angular/material/autocomplete';
|
|
25
25
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
@@ -208,103 +208,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
208
208
|
}]
|
|
209
209
|
}], ctorParameters: () => [] });
|
|
210
210
|
|
|
211
|
-
var RoleAccess;
|
|
212
|
-
(function (RoleAccess) {
|
|
213
|
-
RoleAccess[RoleAccess["None"] = 0] = "None";
|
|
214
|
-
RoleAccess[RoleAccess["View"] = 1] = "View";
|
|
215
|
-
RoleAccess[RoleAccess["Edit"] = 2] = "Edit";
|
|
216
|
-
RoleAccess[RoleAccess["Create"] = 3] = "Create";
|
|
217
|
-
RoleAccess[RoleAccess["Full"] = 4] = "Full";
|
|
218
|
-
})(RoleAccess || (RoleAccess = {}));
|
|
219
|
-
// Added: Inventory movement type enum
|
|
220
|
-
var MovementType;
|
|
221
|
-
(function (MovementType) {
|
|
222
|
-
MovementType[MovementType["In"] = 0] = "In";
|
|
223
|
-
MovementType[MovementType["Out"] = 1] = "Out";
|
|
224
|
-
})(MovementType || (MovementType = {}));
|
|
225
|
-
var DetailsSource;
|
|
226
|
-
(function (DetailsSource) {
|
|
227
|
-
DetailsSource[DetailsSource["Row"] = 0] = "Row";
|
|
228
|
-
DetailsSource[DetailsSource["Url"] = 1] = "Url";
|
|
229
|
-
})(DetailsSource || (DetailsSource = {}));
|
|
230
|
-
class dialogOptions {
|
|
231
|
-
}
|
|
232
|
-
class DetailsDialogConfig {
|
|
233
|
-
}
|
|
234
|
-
class Action {
|
|
235
|
-
}
|
|
236
|
-
class SearchConfig {
|
|
237
|
-
}
|
|
238
|
-
class SecurityConfig {
|
|
239
|
-
}
|
|
240
|
-
class AlertMessage {
|
|
241
|
-
}
|
|
242
|
-
class AlertConfig {
|
|
243
|
-
}
|
|
244
|
-
class NotesConfig {
|
|
245
|
-
}
|
|
246
|
-
class FormConfig {
|
|
247
|
-
}
|
|
248
|
-
class TileConfig {
|
|
249
|
-
}
|
|
250
|
-
class Step {
|
|
251
|
-
}
|
|
252
|
-
class StepConfig {
|
|
253
|
-
}
|
|
254
|
-
class TableConfig {
|
|
255
|
-
}
|
|
256
|
-
class PageConfig {
|
|
257
|
-
}
|
|
258
|
-
//---Base---
|
|
259
|
-
class ApiResponse {
|
|
260
|
-
}
|
|
261
|
-
class Constants {
|
|
262
|
-
static { this.AUTH_USER = 'a'; }
|
|
263
|
-
static { this.AUTH_NAME = 'b'; }
|
|
264
|
-
static { this.AUTH_ROLES = 'c'; }
|
|
265
|
-
static { this.AUTH_TOKEN = 'd'; }
|
|
266
|
-
static { this.AUTH_TOKEN_EXPIRE = 'e'; }
|
|
267
|
-
static { this.AUTH_TENANT_NAME = 'f'; }
|
|
268
|
-
}
|
|
269
|
-
class ListDialogConfig {
|
|
270
|
-
}
|
|
271
|
-
class CapItem {
|
|
272
|
-
constructor() {
|
|
273
|
-
this.name = "";
|
|
274
|
-
this.display = "New Cap Item";
|
|
275
|
-
this.enabled = false;
|
|
276
|
-
this.type = "";
|
|
277
|
-
this.newLine = false;
|
|
278
|
-
this.showMenu = true;
|
|
279
|
-
this.ignoreSubsDisplay = false;
|
|
280
|
-
this.link = "";
|
|
281
|
-
this.icon = "navigate_next";
|
|
282
|
-
this.color = "black";
|
|
283
|
-
this.isBool = false;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
class AppConfig {
|
|
287
|
-
constructor() {
|
|
288
|
-
this.appName = "App Name";
|
|
289
|
-
this.logo = "";
|
|
290
|
-
this.logoSize = "normal";
|
|
291
|
-
this.ADAuth = true;
|
|
292
|
-
this.localAuth = true;
|
|
293
|
-
this.googleAuth = false;
|
|
294
|
-
this.microsoftAuth = false;
|
|
295
|
-
this.microsoftAuthMessage = "Sign in with Microsoft";
|
|
296
|
-
this.selfService = false;
|
|
297
|
-
this.multitenant = false;
|
|
298
|
-
this.navigation = 'top';
|
|
299
|
-
this.progressLine = false;
|
|
300
|
-
this.loginStyle = 'default';
|
|
301
|
-
this.termsUrl = "https://yoursite.com/terms";
|
|
302
|
-
this.privacyUrl = "https://yoursite.com/privacy";
|
|
303
|
-
this.siteUrl = "https://yoursite.com";
|
|
304
|
-
this.navWidth = '200px';
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
211
|
class Core {
|
|
309
212
|
static deepClone(obj) {
|
|
310
213
|
if (obj === null || typeof obj !== 'object') {
|
|
@@ -872,7 +775,6 @@ class DetailsDialogProcessor {
|
|
|
872
775
|
}
|
|
873
776
|
}
|
|
874
777
|
|
|
875
|
-
// Added: Invoice status enum for invoice management
|
|
876
778
|
var InvoiceStatus;
|
|
877
779
|
(function (InvoiceStatus) {
|
|
878
780
|
InvoiceStatus[InvoiceStatus["Draft"] = 0] = "Draft";
|
|
@@ -880,6 +782,30 @@ var InvoiceStatus;
|
|
|
880
782
|
InvoiceStatus[InvoiceStatus["Paid"] = 2] = "Paid";
|
|
881
783
|
InvoiceStatus[InvoiceStatus["Discarded"] = 3] = "Discarded";
|
|
882
784
|
})(InvoiceStatus || (InvoiceStatus = {}));
|
|
785
|
+
// Inventory receipt status tracking enum - mirrors backend
|
|
786
|
+
var InventoryReceiptStatus;
|
|
787
|
+
(function (InventoryReceiptStatus) {
|
|
788
|
+
InventoryReceiptStatus[InventoryReceiptStatus["Draft"] = 0] = "Draft";
|
|
789
|
+
InventoryReceiptStatus[InventoryReceiptStatus["Receiving"] = 1] = "Receiving";
|
|
790
|
+
InventoryReceiptStatus[InventoryReceiptStatus["Completed"] = 2] = "Completed";
|
|
791
|
+
})(InventoryReceiptStatus || (InventoryReceiptStatus = {}));
|
|
792
|
+
// Unit of measure enum - mirrors backend
|
|
793
|
+
var UnitOfMeasure;
|
|
794
|
+
(function (UnitOfMeasure) {
|
|
795
|
+
UnitOfMeasure[UnitOfMeasure["Piece"] = 0] = "Piece";
|
|
796
|
+
UnitOfMeasure[UnitOfMeasure["Box"] = 1] = "Box";
|
|
797
|
+
UnitOfMeasure[UnitOfMeasure["Case"] = 2] = "Case";
|
|
798
|
+
UnitOfMeasure[UnitOfMeasure["Carton"] = 3] = "Carton";
|
|
799
|
+
UnitOfMeasure[UnitOfMeasure["Pallet"] = 4] = "Pallet";
|
|
800
|
+
UnitOfMeasure[UnitOfMeasure["Kilogram"] = 5] = "Kilogram";
|
|
801
|
+
UnitOfMeasure[UnitOfMeasure["Gram"] = 6] = "Gram";
|
|
802
|
+
UnitOfMeasure[UnitOfMeasure["Litre"] = 7] = "Litre";
|
|
803
|
+
UnitOfMeasure[UnitOfMeasure["Millilitre"] = 8] = "Millilitre";
|
|
804
|
+
UnitOfMeasure[UnitOfMeasure["Meter"] = 9] = "Meter";
|
|
805
|
+
UnitOfMeasure[UnitOfMeasure["Pack"] = 10] = "Pack";
|
|
806
|
+
UnitOfMeasure[UnitOfMeasure["Set"] = 11] = "Set";
|
|
807
|
+
UnitOfMeasure[UnitOfMeasure["Dozen"] = 12] = "Dozen";
|
|
808
|
+
})(UnitOfMeasure || (UnitOfMeasure = {}));
|
|
883
809
|
class loginConfig {
|
|
884
810
|
constructor() {
|
|
885
811
|
this.appName = "";
|
|
@@ -1059,6 +985,102 @@ var LogLevel;
|
|
|
1059
985
|
LogLevel[LogLevel["Off"] = 6] = "Off";
|
|
1060
986
|
})(LogLevel || (LogLevel = {}));
|
|
1061
987
|
|
|
988
|
+
var RoleAccess;
|
|
989
|
+
(function (RoleAccess) {
|
|
990
|
+
RoleAccess[RoleAccess["None"] = 0] = "None";
|
|
991
|
+
RoleAccess[RoleAccess["View"] = 1] = "View";
|
|
992
|
+
RoleAccess[RoleAccess["Edit"] = 2] = "Edit";
|
|
993
|
+
RoleAccess[RoleAccess["Create"] = 3] = "Create";
|
|
994
|
+
RoleAccess[RoleAccess["Full"] = 4] = "Full";
|
|
995
|
+
})(RoleAccess || (RoleAccess = {}));
|
|
996
|
+
var MovementType;
|
|
997
|
+
(function (MovementType) {
|
|
998
|
+
MovementType[MovementType["In"] = 0] = "In";
|
|
999
|
+
MovementType[MovementType["Out"] = 1] = "Out";
|
|
1000
|
+
})(MovementType || (MovementType = {}));
|
|
1001
|
+
var DetailsSource;
|
|
1002
|
+
(function (DetailsSource) {
|
|
1003
|
+
DetailsSource[DetailsSource["Row"] = 0] = "Row";
|
|
1004
|
+
DetailsSource[DetailsSource["Url"] = 1] = "Url";
|
|
1005
|
+
})(DetailsSource || (DetailsSource = {}));
|
|
1006
|
+
class dialogOptions {
|
|
1007
|
+
}
|
|
1008
|
+
class DetailsDialogConfig {
|
|
1009
|
+
}
|
|
1010
|
+
class Action {
|
|
1011
|
+
}
|
|
1012
|
+
class SearchConfig {
|
|
1013
|
+
}
|
|
1014
|
+
class SecurityConfig {
|
|
1015
|
+
}
|
|
1016
|
+
class AlertMessage {
|
|
1017
|
+
}
|
|
1018
|
+
class AlertConfig {
|
|
1019
|
+
}
|
|
1020
|
+
class NotesConfig {
|
|
1021
|
+
}
|
|
1022
|
+
class FormConfig {
|
|
1023
|
+
}
|
|
1024
|
+
class TileConfig {
|
|
1025
|
+
}
|
|
1026
|
+
class Step {
|
|
1027
|
+
}
|
|
1028
|
+
class StepConfig {
|
|
1029
|
+
}
|
|
1030
|
+
class TableConfig {
|
|
1031
|
+
}
|
|
1032
|
+
class PageConfig {
|
|
1033
|
+
}
|
|
1034
|
+
//---Base---
|
|
1035
|
+
class ApiResponse {
|
|
1036
|
+
}
|
|
1037
|
+
class Constants {
|
|
1038
|
+
static { this.AUTH_USER = 'a'; }
|
|
1039
|
+
static { this.AUTH_NAME = 'b'; }
|
|
1040
|
+
static { this.AUTH_ROLES = 'c'; }
|
|
1041
|
+
static { this.AUTH_TOKEN = 'd'; }
|
|
1042
|
+
static { this.AUTH_TOKEN_EXPIRE = 'e'; }
|
|
1043
|
+
static { this.AUTH_TENANT_NAME = 'f'; }
|
|
1044
|
+
}
|
|
1045
|
+
class ListDialogConfig {
|
|
1046
|
+
}
|
|
1047
|
+
class CapItem {
|
|
1048
|
+
constructor() {
|
|
1049
|
+
this.name = "";
|
|
1050
|
+
this.display = "New Cap Item";
|
|
1051
|
+
this.enabled = false;
|
|
1052
|
+
this.type = "";
|
|
1053
|
+
this.newLine = false;
|
|
1054
|
+
this.showMenu = true;
|
|
1055
|
+
this.ignoreSubsDisplay = false;
|
|
1056
|
+
this.link = "";
|
|
1057
|
+
this.icon = "navigate_next";
|
|
1058
|
+
this.color = "black";
|
|
1059
|
+
this.isBool = false;
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
class AppConfig {
|
|
1063
|
+
constructor() {
|
|
1064
|
+
this.appName = "App Name";
|
|
1065
|
+
this.logo = "";
|
|
1066
|
+
this.logoSize = "normal";
|
|
1067
|
+
this.ADAuth = true;
|
|
1068
|
+
this.localAuth = true;
|
|
1069
|
+
this.googleAuth = false;
|
|
1070
|
+
this.microsoftAuth = false;
|
|
1071
|
+
this.microsoftAuthMessage = "Sign in with Microsoft";
|
|
1072
|
+
this.selfService = false;
|
|
1073
|
+
this.multitenant = false;
|
|
1074
|
+
this.navigation = 'top';
|
|
1075
|
+
this.progressLine = false;
|
|
1076
|
+
this.loginStyle = 'default';
|
|
1077
|
+
this.termsUrl = "https://yoursite.com/terms";
|
|
1078
|
+
this.privacyUrl = "https://yoursite.com/privacy";
|
|
1079
|
+
this.siteUrl = "https://yoursite.com";
|
|
1080
|
+
this.navWidth = '200px';
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1062
1084
|
class HttpService {
|
|
1063
1085
|
constructor(httpClient, router) {
|
|
1064
1086
|
this.httpClient = httpClient;
|
|
@@ -1409,9 +1431,9 @@ class DataServiceLib {
|
|
|
1409
1431
|
this.capPlans = new CapItem;
|
|
1410
1432
|
this.capGeneral = new CapItem;
|
|
1411
1433
|
this.capCustomers = new CapItem;
|
|
1412
|
-
this.capCategories = new CapItem;
|
|
1413
|
-
this.capSubCategories = new CapItem;
|
|
1414
|
-
this.capBrands = new CapItem;
|
|
1434
|
+
this.capCategories = new CapItem;
|
|
1435
|
+
this.capSubCategories = new CapItem;
|
|
1436
|
+
this.capBrands = new CapItem;
|
|
1415
1437
|
this.capSuppliers = new CapItem;
|
|
1416
1438
|
this.capTasks = new CapItem;
|
|
1417
1439
|
this.capHR = new CapItem;
|
|
@@ -1437,10 +1459,13 @@ class DataServiceLib {
|
|
|
1437
1459
|
this.capLoanPayments = new CapItem;
|
|
1438
1460
|
this.capInventory = new CapItem;
|
|
1439
1461
|
this.capInventoryDashboard = new CapItem;
|
|
1462
|
+
this.capInventoryStock = new CapItem; // Changed: Added new cap item for inventory stock view
|
|
1440
1463
|
this.capProducts = new CapItem;
|
|
1441
1464
|
this.capInventoryItems = new CapItem;
|
|
1465
|
+
this.capPurchaseOrders = new CapItem;
|
|
1442
1466
|
this.capInventoryReceipts = new CapItem;
|
|
1443
1467
|
this.capSalesOrders = new CapItem;
|
|
1468
|
+
this.capSales = new CapItem;
|
|
1444
1469
|
this.capRequisitions = new CapItem;
|
|
1445
1470
|
this.capInventoryAdjustments = new CapItem;
|
|
1446
1471
|
this.capInventoryReturns = new CapItem;
|
|
@@ -2006,15 +2031,15 @@ class DataServiceLib {
|
|
|
2006
2031
|
this.capCustomers.display = "Customers";
|
|
2007
2032
|
this.capCustomers.link = "home/admin/customers";
|
|
2008
2033
|
this.capCustomers.icon = "group";
|
|
2009
|
-
this.capCategories.name = "cap13";
|
|
2034
|
+
this.capCategories.name = "cap13";
|
|
2010
2035
|
this.capCategories.display = "Categories";
|
|
2011
2036
|
this.capCategories.link = "home/admin/categories";
|
|
2012
2037
|
this.capCategories.icon = "category";
|
|
2013
|
-
this.capSubCategories.name = "cap103";
|
|
2038
|
+
this.capSubCategories.name = "cap103";
|
|
2014
2039
|
this.capSubCategories.display = "Sub Categories";
|
|
2015
2040
|
this.capSubCategories.link = "home/admin/subcategories";
|
|
2016
2041
|
this.capSubCategories.icon = "category";
|
|
2017
|
-
this.capBrands.name = "cap14";
|
|
2042
|
+
this.capBrands.name = "cap14";
|
|
2018
2043
|
this.capBrands.display = "Brands";
|
|
2019
2044
|
this.capBrands.link = "home/admin/brands";
|
|
2020
2045
|
this.capBrands.icon = "loyalty";
|
|
@@ -2111,11 +2136,15 @@ class DataServiceLib {
|
|
|
2111
2136
|
this.capInventory.name = "cap34";
|
|
2112
2137
|
this.capInventory.display = "Inventory";
|
|
2113
2138
|
this.capInventory.icon = "inventory";
|
|
2114
|
-
this.capInventory.capSubItems = [this.capInventoryDashboard, this.capProducts, this.capInventoryItems, this.capInventoryReceipts, this.capSalesOrders, this.capRequisitions, this.capInventoryAdjustments, this.capInventoryReturns, this.capRequisitionReturns, this.capInventoryTransactions];
|
|
2139
|
+
this.capInventory.capSubItems = [this.capInventoryDashboard, this.capInventoryStock, this.capProducts, this.capInventoryItems, this.capPurchaseOrders, this.capInventoryReceipts, this.capSalesOrders, this.capSales, this.capRequisitions, this.capInventoryAdjustments, this.capInventoryReturns, this.capRequisitionReturns, this.capInventoryTransactions]; // Changed: Added capInventoryStock to sub items
|
|
2115
2140
|
this.capInventoryDashboard.name = "cap35";
|
|
2116
2141
|
this.capInventoryDashboard.display = "Dashboard";
|
|
2117
2142
|
this.capInventoryDashboard.link = "home/admin/inventory-dashboard";
|
|
2118
2143
|
this.capInventoryDashboard.icon = "dashboard";
|
|
2144
|
+
this.capInventoryStock.name = "cap51"; // Changed: Added inventory stock cap item configuration
|
|
2145
|
+
this.capInventoryStock.display = "Inventory Stock";
|
|
2146
|
+
this.capInventoryStock.link = "home/admin/inventory-stock";
|
|
2147
|
+
this.capInventoryStock.icon = "widgets";
|
|
2119
2148
|
this.capProducts.name = "cap36";
|
|
2120
2149
|
this.capProducts.display = "Products";
|
|
2121
2150
|
this.capProducts.link = "home/admin/inventory-products";
|
|
@@ -2124,6 +2153,10 @@ class DataServiceLib {
|
|
|
2124
2153
|
this.capInventoryItems.display = "Inventory Items";
|
|
2125
2154
|
this.capInventoryItems.link = "home/admin/inventory-items";
|
|
2126
2155
|
this.capInventoryItems.icon = "inventory_2";
|
|
2156
|
+
this.capPurchaseOrders.name = "cap47";
|
|
2157
|
+
this.capPurchaseOrders.display = "Purchase Orders";
|
|
2158
|
+
this.capPurchaseOrders.link = "home/admin/purchase-orders";
|
|
2159
|
+
this.capPurchaseOrders.icon = "shopping_bag";
|
|
2127
2160
|
this.capInventoryReceipts.name = "cap38";
|
|
2128
2161
|
this.capInventoryReceipts.display = "Receipts";
|
|
2129
2162
|
this.capInventoryReceipts.link = "home/admin/inventory-receipts";
|
|
@@ -2132,6 +2165,10 @@ class DataServiceLib {
|
|
|
2132
2165
|
this.capSalesOrders.display = "Sales Orders";
|
|
2133
2166
|
this.capSalesOrders.link = "home/admin/inventory-sales-orders";
|
|
2134
2167
|
this.capSalesOrders.icon = "shopping_cart";
|
|
2168
|
+
this.capSales.name = "cap50";
|
|
2169
|
+
this.capSales.display = "Sales";
|
|
2170
|
+
this.capSales.link = "home/admin/inventory-sales";
|
|
2171
|
+
this.capSales.icon = "point_of_sale";
|
|
2135
2172
|
this.capRequisitions.name = "cap40";
|
|
2136
2173
|
this.capRequisitions.display = "Requisitions";
|
|
2137
2174
|
this.capRequisitions.link = "home/admin/inventory-requisitions";
|
|
@@ -2487,9 +2524,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
2487
2524
|
}], ctorParameters: () => [{ type: i5.MatDialog }, { type: i1$3.BreakpointObserver }] });
|
|
2488
2525
|
|
|
2489
2526
|
class AccountingService {
|
|
2490
|
-
// Changed: Moved from declaration to assignment
|
|
2491
2527
|
constructor() {
|
|
2492
2528
|
this.dataService = inject(DataServiceLib);
|
|
2529
|
+
//--------------------------Accounts Base-------------------------
|
|
2530
|
+
this.accountFormConfig = {
|
|
2531
|
+
security: { allow: [this.dataService.capAccounts] },
|
|
2532
|
+
title: 'Financial Account',
|
|
2533
|
+
includeAudit: true,
|
|
2534
|
+
fields: [
|
|
2535
|
+
{ name: 'name', type: 'text', required: true },
|
|
2536
|
+
{ name: 'type', type: 'select', required: true, loadAction: { url: 'accounts/list/accountTypes' } },
|
|
2537
|
+
{ name: 'balanceDisplay', alias: 'Balance', type: 'label', readonly: true, hideOnCreate: true },
|
|
2538
|
+
],
|
|
2539
|
+
loadAction: { url: 'accounts/id' },
|
|
2540
|
+
heroField: 'accountID',
|
|
2541
|
+
};
|
|
2542
|
+
this.accountCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'accounts?action=create', method: 'post' } };
|
|
2543
|
+
this.finAccounEditButton = { name: 'edit', dialog: true, action: { url: 'accounts?action=edit', method: 'post' } };
|
|
2544
|
+
this.accountBaseDetailsConfig = {
|
|
2545
|
+
formConfig: this.accountFormConfig,
|
|
2546
|
+
tableConfigs: [],
|
|
2547
|
+
heroField: 'accountID',
|
|
2548
|
+
buttons: [this.accountCreateButton, this.finAccounEditButton]
|
|
2549
|
+
};
|
|
2493
2550
|
//--------------------------Invoices-------------------------
|
|
2494
2551
|
// Invoice form configuration with customer and status fields
|
|
2495
2552
|
this.invoiceFormConfig = {
|
|
@@ -2668,10 +2725,12 @@ class AccountingService {
|
|
|
2668
2725
|
loadAction: { url: 'accounts/list/accountTypes' }
|
|
2669
2726
|
},
|
|
2670
2727
|
{ name: 'defaultDebitAccountID', type: 'select', alias: 'Default Debit Account', nullable: true, masterField: 'debitAccountType', masterOptionValue: 'type',
|
|
2671
|
-
loadAction: { url: 'accounts/list/x' },
|
|
2728
|
+
loadAction: { url: 'accounts/list/x' },
|
|
2729
|
+
detailsConfig: this.accountBaseDetailsConfig
|
|
2672
2730
|
},
|
|
2673
2731
|
{ name: 'defaultCreditAccountID', type: 'select', alias: 'Default Credit Account', nullable: true, masterField: 'creditAccountType', masterOptionValue: 'type',
|
|
2674
|
-
loadAction: { url: 'accounts/list/x' },
|
|
2732
|
+
loadAction: { url: 'accounts/list/x' },
|
|
2733
|
+
detailsConfig: this.accountBaseDetailsConfig
|
|
2675
2734
|
},
|
|
2676
2735
|
],
|
|
2677
2736
|
loadAction: { url: 'transactiontypes/id' },
|
|
@@ -2718,11 +2777,13 @@ class AccountingService {
|
|
|
2718
2777
|
{ name: 'date', type: 'date', required: true },
|
|
2719
2778
|
{ name: 'debitAccountID', type: 'select', alias: 'Debit Account', required: true, readonlyCondition: x => x.transactionID,
|
|
2720
2779
|
masterField: 'transactionTypeID', masterValueField: 'debitAccountType', masterDefaultValueField: 'defaultDebitAccountID', masterOptionValue: 'type',
|
|
2721
|
-
loadAction: { url: 'accounts/list/x' },
|
|
2780
|
+
loadAction: { url: 'accounts/list/x' },
|
|
2781
|
+
detailsConfig: this.accountBaseDetailsConfig
|
|
2722
2782
|
},
|
|
2723
2783
|
{ name: 'creditAccountID', type: 'select', alias: 'Credit Account', required: true, readonlyCondition: x => x.transactionID,
|
|
2724
2784
|
masterField: 'transactionTypeID', masterValueField: 'creditAccountType', masterDefaultValueField: 'defaultCreditAccountID', masterOptionValue: 'type',
|
|
2725
|
-
loadAction: { url: 'accounts/list/x' },
|
|
2785
|
+
loadAction: { url: 'accounts/list/x' },
|
|
2786
|
+
detailsConfig: this.accountBaseDetailsConfig
|
|
2726
2787
|
},
|
|
2727
2788
|
{ name: 'description', type: 'text', required: true, span: true },
|
|
2728
2789
|
{ name: 'amount', type: 'label', format: 'money', required: true, hideOnCreate: true, readonly: true },
|
|
@@ -2731,14 +2792,12 @@ class AccountingService {
|
|
|
2731
2792
|
{ name: 'reversalOfTransactionID', type: 'label', alias: 'Reversal Of Transaction', hideOnCreate: true, hiddenCondition: x => !x.isReversal },
|
|
2732
2793
|
],
|
|
2733
2794
|
};
|
|
2734
|
-
// Added: Edit button with condition
|
|
2735
2795
|
this.transactionEditButton = {
|
|
2736
2796
|
name: 'edit',
|
|
2737
2797
|
dialog: true,
|
|
2738
2798
|
action: { url: 'transactions?action=edit', method: 'post' },
|
|
2739
2799
|
visible: x => x.canEdit && !x.isReversal
|
|
2740
2800
|
};
|
|
2741
|
-
// Added: Void button with confirmation
|
|
2742
2801
|
this.transactionVoidButton = {
|
|
2743
2802
|
name: 'void',
|
|
2744
2803
|
display: 'Void',
|
|
@@ -2776,20 +2835,18 @@ class AccountingService {
|
|
|
2776
2835
|
loadAction: { url: 'accounts/transactions/x' }, loadCriteria: 'transactions', loadIDField: 'accountID'
|
|
2777
2836
|
};
|
|
2778
2837
|
//--------------------------Accounts-------------------------
|
|
2779
|
-
this.
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2838
|
+
this.accountDetailsConfig = {
|
|
2839
|
+
...this.accountBaseDetailsConfig,
|
|
2840
|
+
tableConfigs: [
|
|
2841
|
+
{ ...this.accountTransactionsTableConfig },
|
|
2842
|
+
{
|
|
2843
|
+
...this.transactionTypesTableConfig,
|
|
2844
|
+
tabTitle: 'Transaction Types',
|
|
2845
|
+
buttons: [],
|
|
2846
|
+
loadAction: { url: 'transactionTypes/account/x' }, loadCriteria: 'account', loadIDField: 'accountID'
|
|
2847
|
+
},
|
|
2848
|
+
]
|
|
2790
2849
|
};
|
|
2791
|
-
this.accountCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'accounts?action=create', method: 'post' } };
|
|
2792
|
-
this.finAccounEditButton = { name: 'edit', dialog: true, action: { url: 'accounts?action=edit', method: 'post' } };
|
|
2793
2850
|
this.accountsTableConfig = {
|
|
2794
2851
|
showFilter: true,
|
|
2795
2852
|
minColumns: ['name', 'type', 'balance'],
|
|
@@ -2808,20 +2865,6 @@ class AccountingService {
|
|
|
2808
2865
|
loadAction: { url: 'accounts/all/x' },
|
|
2809
2866
|
formConfig: this.accountFormConfig
|
|
2810
2867
|
};
|
|
2811
|
-
this.accountDetailsConfig = {
|
|
2812
|
-
formConfig: this.accountFormConfig,
|
|
2813
|
-
tableConfigs: [
|
|
2814
|
-
{ ...this.accountTransactionsTableConfig },
|
|
2815
|
-
{
|
|
2816
|
-
...this.transactionTypesTableConfig,
|
|
2817
|
-
tabTitle: 'Transaction Types',
|
|
2818
|
-
buttons: [],
|
|
2819
|
-
loadAction: { url: 'transactionTypes/account/x' }, loadCriteria: 'account', loadIDField: 'accountID'
|
|
2820
|
-
},
|
|
2821
|
-
],
|
|
2822
|
-
heroField: 'accountID',
|
|
2823
|
-
buttons: [this.accountCreateButton, this.finAccounEditButton]
|
|
2824
|
-
};
|
|
2825
2868
|
}
|
|
2826
2869
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AccountingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2827
2870
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AccountingService, providedIn: 'root' }); }
|
|
@@ -2831,7 +2874,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
2831
2874
|
args: [{
|
|
2832
2875
|
providedIn: 'root'
|
|
2833
2876
|
}]
|
|
2834
|
-
}]
|
|
2877
|
+
}] });
|
|
2835
2878
|
|
|
2836
2879
|
class LoansService {
|
|
2837
2880
|
constructor() {
|
|
@@ -2863,7 +2906,6 @@ class LoansService {
|
|
|
2863
2906
|
{ name: 'interestMethodName', alias: 'Interest Method' },
|
|
2864
2907
|
{ name: 'minAmount', type: 'money', alias: 'Min Amount' },
|
|
2865
2908
|
{ name: 'maxAmount', type: 'money', alias: 'Max Amount' },
|
|
2866
|
-
// Changed: Display min/max interest rates instead of default rate
|
|
2867
2909
|
{ name: 'minInterestRate', alias: 'Min Rate (%)' },
|
|
2868
2910
|
{ name: 'maxInterestRate', alias: 'Max Rate (%)' },
|
|
2869
2911
|
{ name: 'minTermMonths', alias: 'Min Term' },
|
|
@@ -2928,22 +2970,22 @@ class LoansService {
|
|
|
2928
2970
|
formConfig: {
|
|
2929
2971
|
title: 'Loan Details',
|
|
2930
2972
|
fields: [
|
|
2931
|
-
{ name: 'customerName', type: 'text', alias: 'Customer' },
|
|
2932
|
-
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
2973
|
+
{ name: 'customerName', type: 'text', alias: 'Customer' },
|
|
2974
|
+
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
2933
2975
|
{ name: 'principalAmount', type: 'money', alias: 'Principal Amount' },
|
|
2934
2976
|
{ name: 'interestRate', type: 'number', alias: 'Annual Interest Rate (%)', required: true, min: 0, max: 100 },
|
|
2935
2977
|
{ name: 'monthlyInterestRate', type: 'number', alias: 'Monthly Interest Rate (%)', required: true, min: 0, max: 100 },
|
|
2936
|
-
{ name: 'termMonths', type: 'number', alias: 'Term (Months)' },
|
|
2978
|
+
{ name: 'termMonths', type: 'number', alias: 'Term (Months)' },
|
|
2937
2979
|
{ name: 'disbursementDate', type: 'date', alias: 'Disbursement Date' },
|
|
2938
2980
|
{ name: 'maturityDate', type: 'date', alias: 'Maturity Date' },
|
|
2939
|
-
{ name: 'statusName', type: 'text', alias: 'Status' },
|
|
2981
|
+
{ name: 'statusName', type: 'text', alias: 'Status' },
|
|
2940
2982
|
{ name: 'totalAmountDue', type: 'money', alias: 'Total Amount Due' },
|
|
2941
2983
|
{ name: 'totalPaidAmount', type: 'money', alias: 'Total Paid' },
|
|
2942
2984
|
{ name: 'outstandingBalance', type: 'money', alias: 'Outstanding Balance' },
|
|
2943
2985
|
{ name: 'totalInterest', type: 'money', alias: 'Total Interest' },
|
|
2944
|
-
{ name: 'scheduleCount', type: 'number', alias: 'Total Installments' },
|
|
2945
|
-
{ name: 'paymentCount', type: 'number', alias: 'Payments Made' },
|
|
2946
|
-
{ name: 'overdueCount', type: 'number', alias: 'Overdue Installments' },
|
|
2986
|
+
{ name: 'scheduleCount', type: 'number', alias: 'Total Installments' },
|
|
2987
|
+
{ name: 'paymentCount', type: 'number', alias: 'Payments Made' },
|
|
2988
|
+
{ name: 'overdueCount', type: 'number', alias: 'Overdue Installments' },
|
|
2947
2989
|
],
|
|
2948
2990
|
loadAction: { url: 'loans/id' }
|
|
2949
2991
|
},
|
|
@@ -2951,13 +2993,13 @@ class LoansService {
|
|
|
2951
2993
|
tableConfigs: [
|
|
2952
2994
|
{
|
|
2953
2995
|
...this.loanScheduleTableConfig,
|
|
2954
|
-
tabTitle: 'Payment Schedule',
|
|
2996
|
+
tabTitle: 'Payment Schedule',
|
|
2955
2997
|
loadAction: { url: 'loanschedules/loan/x' },
|
|
2956
2998
|
loadCriteria: 'loan',
|
|
2957
2999
|
loadIDField: 'loanID'
|
|
2958
3000
|
},
|
|
2959
3001
|
{
|
|
2960
|
-
tabTitle: 'Payment History',
|
|
3002
|
+
tabTitle: 'Payment History',
|
|
2961
3003
|
showFilter: true,
|
|
2962
3004
|
columns: [
|
|
2963
3005
|
{ name: 'paymentDate', type: 'date', alias: 'Date' },
|
|
@@ -3201,7 +3243,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
3201
3243
|
|
|
3202
3244
|
// Service to centralize all inventory-related table and form configurations
|
|
3203
3245
|
class InventoryService {
|
|
3204
|
-
// Changed: Moved initialization to constructor to avoid circular references
|
|
3205
3246
|
constructor() {
|
|
3206
3247
|
this.dataService = inject(DataServiceLib);
|
|
3207
3248
|
this.generalService = inject(GeneralService);
|
|
@@ -3209,23 +3250,24 @@ class InventoryService {
|
|
|
3209
3250
|
this.productFormConfig = {
|
|
3210
3251
|
security: { allow: [this.dataService.capProducts] },
|
|
3211
3252
|
title: 'Product',
|
|
3253
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid title duplication
|
|
3212
3254
|
multiColumn: true,
|
|
3213
3255
|
includeAudit: true,
|
|
3214
3256
|
fields: [
|
|
3215
3257
|
{ name: 'productInfo', type: 'section', alias: 'Product Information' },
|
|
3216
|
-
{ name: 'name', type: 'text', required: true, alias: 'Product Name', section: 'productInfo' },
|
|
3217
|
-
{ name: 'sku', type: 'text',
|
|
3218
|
-
{ name: 'description', type: 'text', alias: 'Description', span: true, section: 'productInfo' },
|
|
3258
|
+
{ name: 'name', type: 'text', required: true, alias: 'Product Name', section: 'productInfo', infoMessage: 'The unique name of the product' },
|
|
3259
|
+
{ name: 'sku', type: 'text', alias: 'SKU', section: 'productInfo', infoMessage: 'Stock Keeping Unit for inventory tracking (optional)' }, // Changed: Removed required flag
|
|
3260
|
+
{ name: 'description', type: 'text', alias: 'Description', span: true, section: 'productInfo', infoMessage: 'Detailed description of the product' },
|
|
3219
3261
|
{ name: 'categoryInfo', type: 'section', alias: 'Categorization' },
|
|
3220
|
-
{ name: 'categoryID', type: 'select', alias: 'Category', section: 'categoryInfo', loadAction: { url: 'categories/list/x' }, detailsConfig: this.generalService.categoryDetailsConfig },
|
|
3221
|
-
{ name: 'subCategoryID', type: 'select', alias: 'Sub Category', section: 'categoryInfo', loadAction: { url: 'subcategories/list/x' }, detailsConfig: this.generalService.subCategoryDetailsConfig },
|
|
3222
|
-
{ name: 'brandID', type: 'select', alias: 'Brand', section: 'categoryInfo', loadAction: { url: 'brands/list/x' }, detailsConfig: this.generalService.brandDetailsConfig },
|
|
3262
|
+
{ name: 'categoryID', type: 'select', alias: 'Category', nullable: true, section: 'categoryInfo', loadAction: { url: 'categories/list/x' }, detailsConfig: this.generalService.categoryDetailsConfig, infoMessage: 'The main product category' }, // Changed: Added nullable flag
|
|
3263
|
+
{ name: 'subCategoryID', type: 'select', alias: 'Sub Category', section: 'categoryInfo', loadAction: { url: 'subcategories/list/x' }, detailsConfig: this.generalService.subCategoryDetailsConfig, infoMessage: 'More specific product classification' },
|
|
3264
|
+
{ name: 'brandID', type: 'select', alias: 'Brand', nullable: true, section: 'categoryInfo', loadAction: { url: 'brands/list/x' }, detailsConfig: this.generalService.brandDetailsConfig, infoMessage: 'Product brand or manufacturer' }, // Changed: Added nullable flag
|
|
3223
3265
|
{ name: 'inventoryInfo', type: 'section', alias: 'Inventory Settings' },
|
|
3224
|
-
{ name: 'isSerialized', type: 'checkbox', alias: 'Serialized Product', section: 'inventoryInfo' },
|
|
3225
|
-
{ name: 'baseUnit', type: 'select', required: true, alias: 'Base Unit', section: 'inventoryInfo', loadAction: { url: 'products/list/base-unit' } },
|
|
3226
|
-
{ name: 'minimumInventoryLevel', type: 'number', required: true, alias: 'Minimum Inventory Level', section: 'inventoryInfo' },
|
|
3266
|
+
{ name: 'isSerialized', type: 'checkbox', alias: 'Serialized Product', span: true, section: 'inventoryInfo', infoMessage: 'Track individual items by serial number' }, // Changed: Added span to cross two columns
|
|
3267
|
+
{ name: 'baseUnit', type: 'select', required: true, alias: 'Base Unit', section: 'inventoryInfo', loadAction: { url: 'products/list/base-unit' }, defaultFirstValue: true, infoMessage: 'Unit of measure for inventory tracking' }, // Changed: Added defaultFirstValue flag
|
|
3268
|
+
{ name: 'minimumInventoryLevel', type: 'number', required: true, alias: 'Minimum Inventory Level', section: 'inventoryInfo', infoMessage: 'Alert threshold for low stock' },
|
|
3227
3269
|
{ name: 'pricingInfo', type: 'section', alias: 'Pricing' },
|
|
3228
|
-
{ name: 'sellingPrice', type: 'money', required: true, alias: 'Selling Price', section: 'pricingInfo' }
|
|
3270
|
+
{ name: 'sellingPrice', type: 'money', required: true, alias: 'Selling Price', section: 'pricingInfo', infoMessage: 'Default selling price per unit' }
|
|
3229
3271
|
],
|
|
3230
3272
|
loadAction: { url: 'products/id' },
|
|
3231
3273
|
heroField: 'productID'
|
|
@@ -3233,30 +3275,24 @@ class InventoryService {
|
|
|
3233
3275
|
this.productCreateButton = { name: 'create', display: 'Create Product', dialog: true, action: { url: 'products?action=create', method: 'post' } };
|
|
3234
3276
|
this.productEditButton = { name: 'edit', dialog: true, action: { url: 'products?action=edit', method: 'post' } };
|
|
3235
3277
|
this.productDeleteButton = { name: 'delete', dialog: true, action: { url: 'products?action=delete', method: 'post' } };
|
|
3236
|
-
this.productLowInventoryButton = { name: 'low-inventory', display: 'Low Inventory', icon: { name: 'warning', color: 'orange' }, action: { url: 'products/low-inventory/x', method: 'get' } };
|
|
3237
3278
|
this.productsTableConfig = {
|
|
3238
3279
|
showFilter: true,
|
|
3239
3280
|
flatButtons: true,
|
|
3240
|
-
minColumns: ['name', 'sku', '
|
|
3281
|
+
minColumns: ['name', 'sku', 'categoryName'],
|
|
3241
3282
|
columns: [
|
|
3242
3283
|
{ name: 'name', type: 'text', alias: 'Product Name' },
|
|
3243
3284
|
{ name: 'sku', type: 'text', alias: 'SKU' },
|
|
3244
3285
|
{ name: 'categoryName', type: 'text', alias: 'Category' },
|
|
3245
3286
|
{ name: 'brandName', type: 'text', alias: 'Brand' },
|
|
3246
|
-
{ name: '
|
|
3247
|
-
{ name: 'baseUnit', type: 'text', alias: 'Unit' },
|
|
3248
|
-
{ name: 'currentInventoryLevel', type: 'number', alias: 'Current Stock' },
|
|
3287
|
+
{ name: 'currentInventoryLevel', type: 'number', alias: 'Current Stock', icon: { name: 'warning', color: 'orange', condition: (x) => x.isLowInventory } }, // Changed: Removed separate columns, added low stock icon to current stock
|
|
3249
3288
|
{ name: 'minimumInventoryLevel', type: 'number', alias: 'Min Stock' },
|
|
3250
|
-
{ name: '
|
|
3251
|
-
|
|
3252
|
-
{ name: 'currentAverageCost', type: 'money', alias: 'Avg Cost' }
|
|
3253
|
-
],
|
|
3289
|
+
{ name: 'sellingPrice', type: 'money', alias: 'Price' }
|
|
3290
|
+
], // Changed: Removed isSerialized, baseUnit, currentAverageCost, isLowInventory columns
|
|
3254
3291
|
buttons: [
|
|
3255
3292
|
this.productCreateButton,
|
|
3256
3293
|
{ name: 'view', dialog: true, detailsConfig: this.productDetailsConfig },
|
|
3257
3294
|
this.productEditButton,
|
|
3258
3295
|
this.productDeleteButton,
|
|
3259
|
-
this.productLowInventoryButton
|
|
3260
3296
|
],
|
|
3261
3297
|
loadAction: { url: 'products/all/x' },
|
|
3262
3298
|
formConfig: this.productFormConfig
|
|
@@ -3264,6 +3300,7 @@ class InventoryService {
|
|
|
3264
3300
|
//--------------------------Requisitions-------------------------
|
|
3265
3301
|
this.requisitionItemFormConfig = {
|
|
3266
3302
|
title: 'Requisition Item',
|
|
3303
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'Add Item' button
|
|
3267
3304
|
fields: [
|
|
3268
3305
|
{ name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.productDetailsConfig },
|
|
3269
3306
|
{ name: 'requestedQuantity', type: 'number', alias: 'Requested Qty', required: true },
|
|
@@ -3277,7 +3314,7 @@ class InventoryService {
|
|
|
3277
3314
|
showFilter: false,
|
|
3278
3315
|
elevation: 'none',
|
|
3279
3316
|
flatButtons: true,
|
|
3280
|
-
// showInModes: ['edit'],
|
|
3317
|
+
// showInModes: ['edit'],
|
|
3281
3318
|
columns: [
|
|
3282
3319
|
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3283
3320
|
{ name: 'requestedQuantity', type: 'number', alias: 'Requested Qty' },
|
|
@@ -3295,6 +3332,7 @@ class InventoryService {
|
|
|
3295
3332
|
this.requisitionFormConfig = {
|
|
3296
3333
|
security: { allow: [this.dataService.capRequisitions] },
|
|
3297
3334
|
title: 'Requisition',
|
|
3335
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'New Requisition' button
|
|
3298
3336
|
multiColumn: true,
|
|
3299
3337
|
includeAudit: true,
|
|
3300
3338
|
fields: [
|
|
@@ -3313,14 +3351,14 @@ class InventoryService {
|
|
|
3313
3351
|
heroField: 'requisitionID'
|
|
3314
3352
|
};
|
|
3315
3353
|
this.requisitionEditButton = { name: 'edit', dialog: true, action: { url: 'requisitions?action=edit', method: 'post' } };
|
|
3316
|
-
this.requisitionSubmitButton = { name: 'submit', display: 'Submit Requisition', icon: { name: 'send', color: 'primary' }, action: { url: 'requisitions?action=submit', method: 'post', successMessage: 'Requisition Submitted' }, confirm: { message: 'Submit this requisition for approval?' }, visible: (row) => row.status === 0 };
|
|
3354
|
+
this.requisitionSubmitButton = { name: 'submit', display: 'Submit Requisition', icon: { name: 'send', color: 'primary' }, action: { url: 'requisitions?action=submit', method: 'post', successMessage: 'Requisition Submitted' }, confirm: { message: 'Submit this requisition for approval?' }, visible: (row) => row.status === 0 };
|
|
3317
3355
|
this.requisitionIssueButton = { name: 'issue', display: 'Issue Items', icon: { name: 'check', color: 'green' }, inDialog: true, action: { url: 'requisitions?action=issue', method: 'post', successMessage: 'Items Issued' }, confirm: { message: 'Issue items for this requisition?' }, visible: (row) => row.pendingApproval === false && row.status === 0 };
|
|
3318
3356
|
this.requisitionCancelButton = { name: 'cancel', display: 'Cancel Request', icon: { name: 'close', color: 'red' }, inDialog: true, action: { url: 'requisitions?action=cancel', method: 'post', successMessage: 'Requisition Cancelled' }, confirm: { message: 'Cancel this requisition?' }, visible: (row) => row.status === 0 };
|
|
3319
3357
|
this.requisitionDetailsConfig = {
|
|
3320
3358
|
formConfig: this.requisitionFormConfig,
|
|
3321
3359
|
tableConfigs: [this.requisitionItemsTableConfig],
|
|
3322
3360
|
heroField: 'requisitionID',
|
|
3323
|
-
buttons: [this.requisitionEditButton, this.requisitionSubmitButton, this.requisitionIssueButton, this.requisitionCancelButton]
|
|
3361
|
+
buttons: [this.requisitionEditButton, this.requisitionSubmitButton, this.requisitionIssueButton, this.requisitionCancelButton]
|
|
3324
3362
|
};
|
|
3325
3363
|
this.requisitionViewButton = { name: 'view', dialog: true, detailsConfig: this.requisitionDetailsConfig };
|
|
3326
3364
|
this.requisitionsTableConfig = {
|
|
@@ -3348,15 +3386,151 @@ class InventoryService {
|
|
|
3348
3386
|
loadAction: { url: 'requisitions/all/x' },
|
|
3349
3387
|
formConfig: this.requisitionFormConfig
|
|
3350
3388
|
};
|
|
3351
|
-
//--------------------------
|
|
3352
|
-
|
|
3353
|
-
|
|
3389
|
+
//--------------------------Purchase Orders-------------------------
|
|
3390
|
+
// Payment type options (used across forms)
|
|
3391
|
+
this.paymentTypeOptions = [
|
|
3392
|
+
{ value: 0, name: 'Cash' },
|
|
3393
|
+
{ value: 1, name: 'Bank' },
|
|
3394
|
+
{ value: 2, name: 'Credit' }
|
|
3395
|
+
];
|
|
3396
|
+
// PO Item form configuration
|
|
3397
|
+
this.purchaseOrderItemFormConfig = {
|
|
3398
|
+
title: 'PO Item',
|
|
3399
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid title duplication with button name
|
|
3354
3400
|
fields: [
|
|
3355
|
-
{ name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.productDetailsConfig },
|
|
3356
|
-
{ name: '
|
|
3357
|
-
{ name: '
|
|
3358
|
-
{ name: 'lineTotal', type: 'money', alias: 'Line Total', readonly: true }
|
|
3359
|
-
|
|
3401
|
+
{ name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.productDetailsConfig }, // Changed: Added detailsConfig to enable dialog link
|
|
3402
|
+
{ name: 'orderedQuantity', type: 'number', alias: 'Quantity', required: true },
|
|
3403
|
+
{ name: 'estimatedUnitCost', type: 'money', alias: 'Est. Unit Cost', required: true },
|
|
3404
|
+
{ name: 'lineTotal', type: 'money', alias: 'Line Total', readonly: true, hideOnCreate: true } // Changed: Hide line total on create
|
|
3405
|
+
],
|
|
3406
|
+
loadAction: { url: 'purchaseorderitems/id' }
|
|
3407
|
+
};
|
|
3408
|
+
// PO Items table - shows ordered vs received quantities
|
|
3409
|
+
this.purchaseOrderItemsTableConfig = {
|
|
3410
|
+
tabTitle: 'Items',
|
|
3411
|
+
showFilter: false,
|
|
3412
|
+
elevation: 'none',
|
|
3413
|
+
flatButtons: true,
|
|
3414
|
+
columns: [
|
|
3415
|
+
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3416
|
+
{ name: 'orderedQuantity', type: 'number', alias: 'Ordered' },
|
|
3417
|
+
{ name: 'receivedQuantity', type: 'number', alias: 'Received' },
|
|
3418
|
+
{ name: 'remainingQuantity', type: 'number', alias: 'Remaining' },
|
|
3419
|
+
{ name: 'estimatedUnitCost', type: 'money', alias: 'Est. Cost' },
|
|
3420
|
+
{ name: 'lineTotal', type: 'money', alias: 'Line Total' },
|
|
3421
|
+
{ name: 'isFullyReceived', type: 'checkbox', alias: 'Complete', icon: { name: 'check_circle', color: 'green' } }
|
|
3422
|
+
],
|
|
3423
|
+
buttons: [
|
|
3424
|
+
{ name: 'create', display: 'Add Item', dialog: true, action: { url: 'purchaseorderitems?action=create', method: 'post' } },
|
|
3425
|
+
{ name: 'edit', dialog: true, action: { url: 'purchaseorderitems?action=edit', method: 'post' } },
|
|
3426
|
+
{ name: 'delete', dialog: true, action: { url: 'purchaseorderitems?action=delete', method: 'post' } }
|
|
3427
|
+
],
|
|
3428
|
+
loadAction: { url: 'purchaseorderitems/x/x' },
|
|
3429
|
+
loadCriteria: 'po',
|
|
3430
|
+
loadIDField: 'purchaseOrderID',
|
|
3431
|
+
formConfig: this.purchaseOrderItemFormConfig
|
|
3432
|
+
};
|
|
3433
|
+
// PO form configuration
|
|
3434
|
+
this.purchaseOrderFormConfig = {
|
|
3435
|
+
security: { allow: [this.dataService.capInventoryReceipts] },
|
|
3436
|
+
title: 'Purchase Order',
|
|
3437
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid title duplication
|
|
3438
|
+
multiColumn: true,
|
|
3439
|
+
includeAudit: true,
|
|
3440
|
+
fields: [
|
|
3441
|
+
{ name: 'poInfo', type: 'section', alias: 'Purchase Order Information' },
|
|
3442
|
+
{ name: 'poNumber', type: 'text', alias: 'PO Number', readonly: true, hideOnCreate: true, section: 'poInfo' }, // Changed: Hide PO number on create
|
|
3443
|
+
{ name: 'supplierID', type: 'select', required: true, alias: 'Supplier', section: 'poInfo', loadAction: { url: 'suppliers/list/x' }, detailsConfig: this.dataService.supplierDetailsConfig },
|
|
3444
|
+
{ name: 'orderDate', type: 'date', required: true, alias: 'Order Date', section: 'poInfo' },
|
|
3445
|
+
{ name: 'expectedDeliveryDate', type: 'date', alias: 'Expected Delivery', section: 'poInfo' },
|
|
3446
|
+
{ name: 'totals', type: 'section', alias: 'Totals', hideOnCreate: true, collapsed: true }, // Changed: Hide totals section on create and collapse by default
|
|
3447
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals' },
|
|
3448
|
+
{ name: 'totalReceivedAmount', type: 'money', alias: 'Received Amount', readonly: true, section: 'totals' },
|
|
3449
|
+
{ name: 'remainingAmount', type: 'money', alias: 'Remaining', readonly: true, section: 'totals' },
|
|
3450
|
+
{ name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },
|
|
3451
|
+
{ name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo' }
|
|
3452
|
+
], // Changed: Removed statusName field completely
|
|
3453
|
+
loadAction: { url: 'purchaseorders/id' },
|
|
3454
|
+
heroField: 'purchaseOrderID'
|
|
3455
|
+
};
|
|
3456
|
+
// Special form for receiving goods from PO
|
|
3457
|
+
this.receiveGoodsFormConfig = {
|
|
3458
|
+
title: 'Receive Goods',
|
|
3459
|
+
multiColumn: true,
|
|
3460
|
+
fields: [
|
|
3461
|
+
{ name: 'purchaseOrderID', type: 'number', alias: 'PO ID', readonly: true, hidden: true },
|
|
3462
|
+
{ name: 'poNumber', type: 'text', alias: 'PO Number', readonly: true },
|
|
3463
|
+
{ name: 'supplierID', type: 'number', alias: 'Supplier ID', readonly: true, hidden: true },
|
|
3464
|
+
{ name: 'supplierName', type: 'text', alias: 'Supplier', readonly: true },
|
|
3465
|
+
{ name: 'receiptDate', type: 'date', required: true, alias: 'Receipt Date' },
|
|
3466
|
+
{ name: 'paymentType', type: 'select', required: true, alias: 'Payment Type', options: this.paymentTypeOptions },
|
|
3467
|
+
{ name: 'supplierInvoiceNumber', type: 'text', alias: 'Supplier Invoice #' },
|
|
3468
|
+
{ name: 'notes', type: 'text', alias: 'Notes', span: true }
|
|
3469
|
+
]
|
|
3470
|
+
};
|
|
3471
|
+
// Details config for receive goods dialog
|
|
3472
|
+
this.receiveGoodsDetailsConfig = {
|
|
3473
|
+
formConfig: this.receiveGoodsFormConfig,
|
|
3474
|
+
buttons: []
|
|
3475
|
+
};
|
|
3476
|
+
// PO action buttons
|
|
3477
|
+
this.purchaseOrderEditButton = { name: 'edit', dialog: true, action: { url: 'purchaseorders?action=edit', method: 'post' } };
|
|
3478
|
+
this.purchaseOrderConfirmButton = { name: 'confirm', display: 'Confirm PO', inDialog: true, icon: { name: 'check_circle', color: 'blue' }, action: { url: 'purchaseorders?action=confirm', method: 'post', successMessage: 'PO Confirmed' }, confirm: { message: 'Confirm this purchase order? Items will be locked.' }, visible: (po) => po.statusName === 'Draft' };
|
|
3479
|
+
this.purchaseOrderCancelButton = { name: 'cancel', display: 'Cancel PO', inDialog: true, icon: { name: 'cancel', color: 'red' }, action: { url: 'purchaseorders?action=cancel', method: 'post', successMessage: 'PO Cancelled' }, confirm: { message: 'Cancel this purchase order?' }, visible: (po) => po.statusName !== 'FullyReceived' && po.statusName !== 'PartiallyReceived' };
|
|
3480
|
+
// Receive goods button - creates receipt linked to PO
|
|
3481
|
+
this.purchaseOrderReceiveButton = {
|
|
3482
|
+
name: 'receive',
|
|
3483
|
+
display: 'Receive Goods',
|
|
3484
|
+
inDialog: true,
|
|
3485
|
+
icon: { name: 'inventory_2', color: 'green' },
|
|
3486
|
+
dialog: true,
|
|
3487
|
+
detailsConfig: this.receiveGoodsDetailsConfig,
|
|
3488
|
+
action: { url: 'inventoryreceipts?action=create', method: 'post' },
|
|
3489
|
+
visible: (po) => po.statusName === 'Confirmed' || po.statusName === 'PartiallyReceived'
|
|
3490
|
+
};
|
|
3491
|
+
// PO details configuration
|
|
3492
|
+
this.purchaseOrderDetailsConfig = {
|
|
3493
|
+
formConfig: this.purchaseOrderFormConfig,
|
|
3494
|
+
tableConfigs: [this.purchaseOrderItemsTableConfig],
|
|
3495
|
+
heroField: 'purchaseOrderID',
|
|
3496
|
+
buttons: [this.purchaseOrderEditButton, this.purchaseOrderConfirmButton, this.purchaseOrderReceiveButton, this.purchaseOrderCancelButton]
|
|
3497
|
+
};
|
|
3498
|
+
this.purchaseOrderViewButton = { name: 'view', dialog: true, detailsConfig: this.purchaseOrderDetailsConfig };
|
|
3499
|
+
// PO table configuration
|
|
3500
|
+
this.purchaseOrdersTableConfig = {
|
|
3501
|
+
showFilter: true,
|
|
3502
|
+
flatButtons: true,
|
|
3503
|
+
minColumns: ['poNumber', 'supplierName', 'orderDate'],
|
|
3504
|
+
columns: [
|
|
3505
|
+
{ name: 'poNumber', type: 'text', alias: 'PO #' },
|
|
3506
|
+
{ name: 'supplierName', type: 'text', alias: 'Supplier' },
|
|
3507
|
+
{ name: 'orderDate', type: 'date', alias: 'Order Date' },
|
|
3508
|
+
{ name: 'expectedDeliveryDate', type: 'date', alias: 'Expected Delivery' },
|
|
3509
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total' },
|
|
3510
|
+
{ name: 'totalReceivedAmount', type: 'money', alias: 'Received' },
|
|
3511
|
+
{ name: 'remainingAmount', type: 'money', alias: 'Remaining' },
|
|
3512
|
+
{ name: 'statusName', type: 'chip', alias: 'Status', colors: [{ name: '#E0E0E0', condition: x => x.statusName == 'Draft' }, { name: '#BBDEFB', condition: x => x.statusName == 'Confirmed' }, { name: '#FFE0B2', condition: x => x.statusName == 'PartiallyReceived' }, { name: '#C8E6C9', condition: x => x.statusName == 'FullyReceived' }, { name: '#FFCDD2', condition: x => x.statusName == 'Cancelled' }] } // Changed: Use lighter material colors for better readability
|
|
3513
|
+
],
|
|
3514
|
+
buttons: [
|
|
3515
|
+
{ name: 'create', display: 'New Purchase Order', dialog: true, action: { url: 'purchaseorders?action=create', method: 'post' }, onSuccessButton: this.purchaseOrderViewButton },
|
|
3516
|
+
{ name: 'view', dialog: true, detailsConfig: this.purchaseOrderDetailsConfig },
|
|
3517
|
+
{ name: 'delete', dialog: true, action: { url: 'purchaseorders?action=delete', method: 'post' } }
|
|
3518
|
+
],
|
|
3519
|
+
loadAction: { url: 'purchaseorders/all/x' },
|
|
3520
|
+
formConfig: this.purchaseOrderFormConfig
|
|
3521
|
+
};
|
|
3522
|
+
//--------------------------Inventory Receipts (Updated)-------------------------
|
|
3523
|
+
this.inventoryReceiptItemFormConfig = {
|
|
3524
|
+
title: 'Receipt Item',
|
|
3525
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'Add Item' button
|
|
3526
|
+
fields: [
|
|
3527
|
+
{ name: 'productID', type: 'select', alias: 'Product', required: true, span: true,
|
|
3528
|
+
loadAction: { url: 'products/list/x' },
|
|
3529
|
+
detailsConfig: this.productDetailsConfig, infoMessage: 'Product being received' // Changed: Added info message
|
|
3530
|
+
},
|
|
3531
|
+
{ name: 'quantity', type: 'number', alias: 'Quantity', required: true, infoMessage: 'Number of units received' }, // Changed: Added info message
|
|
3532
|
+
{ name: 'unitCost', type: 'money', alias: 'Unit Cost', required: true, infoMessage: 'Cost per unit' }, // Changed: Added info message
|
|
3533
|
+
{ name: 'serialNumbers', type: 'text', alias: 'Serial Numbers (comma-separated)', infoMessage: 'Comma-separated list of serial numbers for tracked items' }
|
|
3360
3534
|
],
|
|
3361
3535
|
loadAction: { url: 'inventoryreceiptitems/id' }
|
|
3362
3536
|
};
|
|
@@ -3365,14 +3539,14 @@ class InventoryService {
|
|
|
3365
3539
|
showFilter: false,
|
|
3366
3540
|
elevation: 'none',
|
|
3367
3541
|
flatButtons: true,
|
|
3368
|
-
// showInModes: ['edit'],
|
|
3542
|
+
// showInModes: ['edit'],
|
|
3369
3543
|
columns: [
|
|
3370
3544
|
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3371
3545
|
{ name: 'quantity', type: 'number', alias: 'Quantity' },
|
|
3546
|
+
{ name: 'unitName', type: 'text', alias: 'Unit' }, // Changed: Added unit column to display unit of measure from product
|
|
3372
3547
|
{ name: 'unitCost', type: 'money', alias: 'Unit Cost' },
|
|
3373
|
-
{ name: 'lineTotal', type: 'money', alias: 'Line Total' }
|
|
3374
|
-
|
|
3375
|
-
],
|
|
3548
|
+
{ name: 'lineTotal', type: 'money', alias: 'Line Total' }
|
|
3549
|
+
], // Changed: Removed serialNumbers column
|
|
3376
3550
|
buttons: [
|
|
3377
3551
|
{ name: 'create', display: 'Add Item', dialog: true, action: { url: 'inventoryreceiptitems?action=create', method: 'post' } },
|
|
3378
3552
|
{ name: 'edit', dialog: true, action: { url: 'inventoryreceiptitems?action=edit', method: 'post' } },
|
|
@@ -3384,54 +3558,83 @@ class InventoryService {
|
|
|
3384
3558
|
this.inventoryReceiptFormConfig = {
|
|
3385
3559
|
security: { allow: [this.dataService.capInventoryReceipts] },
|
|
3386
3560
|
title: 'Inventory Receipt',
|
|
3561
|
+
fixedTitle: true,
|
|
3387
3562
|
multiColumn: true,
|
|
3388
3563
|
includeAudit: true,
|
|
3389
3564
|
fields: [
|
|
3390
3565
|
{ name: 'receiptInfo', type: 'section', alias: 'Receipt Information' },
|
|
3391
|
-
{ name: 'receiptNumber', type: 'text', alias: 'Receipt Number', readonly: true, section: 'receiptInfo' },
|
|
3392
|
-
{ name: '
|
|
3393
|
-
{ name: '
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
{ name: '
|
|
3566
|
+
{ name: 'receiptNumber', type: 'text', alias: 'Receipt Number', readonly: true, hideOnCreate: true, section: 'receiptInfo', infoMessage: 'Auto-generated unique receipt identifier' }, // Changed: Added info message
|
|
3567
|
+
{ name: 'poNumber', type: 'text', alias: 'PO Number', hideOnCreate: true, section: 'receiptInfo', hiddenCondition: (row) => !row.purchaseOrderID, infoMessage: 'Linked purchase order if receiving against a PO' }, // Changed: Hide PO number if no PO linked, added info message
|
|
3568
|
+
{ name: 'supplierID', type: 'select', required: true, alias: 'Supplier', section: 'receiptInfo',
|
|
3569
|
+
loadAction: { url: 'suppliers/list/x' }, detailsConfig: this.dataService.supplierDetailsConfig, infoMessage: 'Supplier providing the goods' // Changed: Added info message
|
|
3570
|
+
},
|
|
3571
|
+
{ name: 'receiptDate', type: 'date', required: true, alias: 'Receipt Date', section: 'receiptInfo', infoMessage: 'Date goods were received' }, // Changed: Added info message
|
|
3572
|
+
{ name: 'paymentType', type: 'select', required: true, alias: 'Payment Type', section: 'receiptInfo', options: this.paymentTypeOptions, defaultFirstValue: true, infoMessage: 'Payment method used for this purchase' }, // Changed: Default payment type to Cash (value: 0), added info message
|
|
3573
|
+
{ name: 'supplierInvoiceNumber', type: 'text', alias: 'Supplier Invoice #', section: 'receiptInfo', infoMessage: 'Invoice number from supplier' }, // Changed: Added info message
|
|
3574
|
+
{ name: 'totals', type: 'section', alias: 'Totals', hideOnCreate: true, collapsed: true }, // Changed: Hide totals section on create, collapse when shown on edit
|
|
3575
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals', infoMessage: 'Total value of all items' }, // Changed: Added info message
|
|
3397
3576
|
{ name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },
|
|
3398
|
-
{ name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo' }
|
|
3577
|
+
{ name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo', infoMessage: 'Additional notes about this receipt' }
|
|
3399
3578
|
],
|
|
3400
3579
|
loadAction: { url: 'inventoryreceipts/id' },
|
|
3401
3580
|
heroField: 'inventoryReceiptID'
|
|
3402
3581
|
};
|
|
3403
|
-
this.inventoryReceiptEditButton = { name: 'edit', dialog: true, action: { url: 'inventoryreceipts?action=edit', method: 'post' } };
|
|
3404
|
-
this.
|
|
3582
|
+
this.inventoryReceiptEditButton = { name: 'edit', dialog: true, action: { url: 'inventoryreceipts?action=edit', method: 'post' }, visible: (x) => x.status !== InventoryReceiptStatus.Completed }; // Changed: Use status enum instead of statusName
|
|
3583
|
+
this.inventoryReceiptCompleteButton = { name: 'complete', display: 'Complete Receipt', inDialog: true, // Changed: Updated display text and action name
|
|
3584
|
+
icon: { name: 'check_circle', color: 'green' },
|
|
3585
|
+
action: { url: 'inventoryreceipts?action=complete', method: 'post', successMessage: 'Receipt Completed' }, // Changed: Updated endpoint and message
|
|
3586
|
+
confirm: { message: 'Complete this receipt? Inventory will be updated and receipt will become read-only.' }, // Changed: Updated confirmation message
|
|
3587
|
+
visible: (x) => x.status !== InventoryReceiptStatus.Completed // Changed: Use status enum instead of statusName
|
|
3588
|
+
};
|
|
3589
|
+
this.inventoryReceiptStepConfig = {
|
|
3590
|
+
valueField: 'status', // Changed: Use status instead of statusName
|
|
3591
|
+
sticky: true,
|
|
3592
|
+
steps: [
|
|
3593
|
+
{ name: 'Draft', value: InventoryReceiptStatus.Draft, icon: 'article' }, // Changed: Use enum value
|
|
3594
|
+
{ name: 'Receiving', value: InventoryReceiptStatus.Receiving, icon: 'inventory_2' }, // Changed: Use enum value
|
|
3595
|
+
{ name: 'Completed', value: InventoryReceiptStatus.Completed, icon: 'check_circle' } // Changed: Use enum value
|
|
3596
|
+
]
|
|
3597
|
+
};
|
|
3405
3598
|
this.inventoryReceiptDetailsConfig = {
|
|
3406
3599
|
formConfig: this.inventoryReceiptFormConfig,
|
|
3407
3600
|
tableConfigs: [this.inventoryReceiptItemsTableConfig],
|
|
3408
3601
|
heroField: 'inventoryReceiptID',
|
|
3409
|
-
|
|
3602
|
+
stepConfig: this.inventoryReceiptStepConfig, // Changed: Added step config
|
|
3603
|
+
buttons: [this.inventoryReceiptEditButton, this.inventoryReceiptCompleteButton] // Changed: Updated button reference
|
|
3410
3604
|
};
|
|
3411
3605
|
this.inventoryReceiptViewButton = { name: 'view', dialog: true, detailsConfig: this.inventoryReceiptDetailsConfig };
|
|
3606
|
+
this.inventoryQuickPurchaseButton = { name: 'create', display: 'Quick Purchase', dialog: true, action: { url: 'inventoryreceipts?action=create', method: 'post' }, onSuccessButton: this.inventoryReceiptViewButton };
|
|
3412
3607
|
this.inventoryReceiptsTableConfig = {
|
|
3413
3608
|
showFilter: true,
|
|
3414
3609
|
flatButtons: true,
|
|
3415
3610
|
minColumns: ['receiptNumber', 'supplierName', 'receiptDate'],
|
|
3416
3611
|
columns: [
|
|
3417
|
-
{ name: 'receiptNumber', type: 'text', alias: 'Receipt #' },
|
|
3612
|
+
{ name: 'receiptNumber', type: 'text', alias: 'Receipt #', icon: { name: 'hourglass_empty', color: 'orange', condition: (x) => x.pendingApproval, tip: 'Pending Approval' } },
|
|
3418
3613
|
{ name: 'supplierName', type: 'text', alias: 'Supplier' },
|
|
3419
3614
|
{ name: 'receiptDate', type: 'date', alias: 'Date' },
|
|
3420
|
-
{ name: '
|
|
3421
|
-
|
|
3422
|
-
|
|
3615
|
+
{ name: 'status', type: 'icon', alias: 'Status', detailsConfig: this.inventoryReceiptDetailsConfig, // Changed: Use status instead of statusName
|
|
3616
|
+
icons: [
|
|
3617
|
+
{ name: 'article', color: '#9E9E9E', condition: (x) => x.status === InventoryReceiptStatus.Draft, tip: 'Draft' }, // Changed: Use status enum
|
|
3618
|
+
{ name: 'inventory_2', color: '#2196F3', condition: (x) => x.status === InventoryReceiptStatus.Receiving, tip: 'Receiving' }, // Changed: Use status enum
|
|
3619
|
+
{ name: 'check_circle', color: '#4CAF50', condition: (x) => x.status === InventoryReceiptStatus.Completed, tip: 'Completed' } // Changed: Use status enum
|
|
3620
|
+
]
|
|
3621
|
+
},
|
|
3622
|
+
{ name: 'paymentTypeName', type: 'text', alias: 'Payment' },
|
|
3623
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total Value' }
|
|
3423
3624
|
],
|
|
3424
3625
|
buttons: [
|
|
3425
|
-
{ name: '
|
|
3426
|
-
|
|
3427
|
-
{ name: '
|
|
3626
|
+
{ name: 'view', icon: { name: 'launch' }, dialog: true, detailsConfig: this.inventoryReceiptDetailsConfig },
|
|
3627
|
+
this.inventoryQuickPurchaseButton,
|
|
3628
|
+
{ name: 'edit', dialog: true, detailsConfig: this.inventoryReceiptDetailsConfig, visible: (x) => x.status !== InventoryReceiptStatus.Completed }, // Changed: Use status enum instead of statusName
|
|
3629
|
+
{ name: 'delete', dialog: true, action: { url: 'inventoryreceipts?action=delete', method: 'post' }, visible: (x) => x.status !== InventoryReceiptStatus.Completed } // Changed: Use status enum instead of statusName
|
|
3428
3630
|
],
|
|
3429
|
-
loadAction: { url: 'inventoryreceipts/all/x' },
|
|
3631
|
+
loadAction: { url: 'inventoryreceipts/all/x?order=desc' },
|
|
3430
3632
|
formConfig: this.inventoryReceiptFormConfig
|
|
3431
3633
|
};
|
|
3432
3634
|
//--------------------------Sales Orders-------------------------
|
|
3433
3635
|
this.salesOrderItemFormConfig = {
|
|
3434
3636
|
title: 'Sales Order Item',
|
|
3637
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'Add Item' button
|
|
3435
3638
|
fields: [
|
|
3436
3639
|
{ name: 'productID', type: 'select', alias: 'Product', required: true, loadAction: { url: 'products/list/x' }, detailsConfig: this.productDetailsConfig },
|
|
3437
3640
|
{ name: 'quantity', type: 'number', alias: 'Quantity', required: true },
|
|
@@ -3447,7 +3650,7 @@ class InventoryService {
|
|
|
3447
3650
|
showFilter: false,
|
|
3448
3651
|
elevation: 'none',
|
|
3449
3652
|
flatButtons: true,
|
|
3450
|
-
// showInModes: ['edit'],
|
|
3653
|
+
// showInModes: ['edit'],
|
|
3451
3654
|
columns: [
|
|
3452
3655
|
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3453
3656
|
{ name: 'quantity', type: 'number', alias: 'Quantity' },
|
|
@@ -3479,6 +3682,9 @@ class InventoryService {
|
|
|
3479
3682
|
{ name: 'quickProcess', type: 'section', alias: 'Quick Processing' },
|
|
3480
3683
|
{ name: 'quickDelivery', type: 'checkbox', alias: 'Quick Delivery (Skip to Delivered)', section: 'quickProcess' },
|
|
3481
3684
|
{ name: 'deliveredDate', type: 'date', alias: 'Delivery Date', section: 'quickProcess' },
|
|
3685
|
+
{ name: 'paymentInfo', type: 'section', alias: 'Payment (For Delivery)' },
|
|
3686
|
+
{ name: 'paymentMethod', type: 'select', alias: 'Payment Method', section: 'paymentInfo', options: [{ name: 'Cash', value: 0 }, { name: 'Bank Transfer', value: 1 }, { name: 'Mobile Money', value: 2 }, { name: 'Card', value: 3 }, { name: 'Credit', value: 4 }] },
|
|
3687
|
+
{ name: 'paymentReference', type: 'text', alias: 'Payment Reference', section: 'paymentInfo' },
|
|
3482
3688
|
{ name: 'status', type: 'select', alias: 'Status', readonly: true, loadAction: { url: 'salesorders/list/status' } },
|
|
3483
3689
|
{ name: 'totals', type: 'section', alias: 'Totals' },
|
|
3484
3690
|
{ name: 'subTotal', type: 'money', alias: 'Sub Total', readonly: true, section: 'totals' },
|
|
@@ -3553,19 +3759,60 @@ class InventoryService {
|
|
|
3553
3759
|
minColumns: ['productName', 'serialNumber', 'quantity'],
|
|
3554
3760
|
columns: [
|
|
3555
3761
|
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3556
|
-
{ name: 'serialNumber', type: 'text', alias: 'Serial Number' },
|
|
3762
|
+
{ name: 'serialNumber', type: 'text', alias: 'Serial Number' }, // Changed: Backend should return N/A for non-serialized products
|
|
3557
3763
|
{ name: 'quantity', type: 'number', alias: 'Quantity' },
|
|
3558
3764
|
{ name: 'unitCost', type: 'money', alias: 'Unit Cost' },
|
|
3559
3765
|
{ name: 'totalValue', type: 'money', alias: 'Total Value' },
|
|
3560
|
-
{ name: '
|
|
3766
|
+
{ name: 'statusName', type: 'text', alias: 'Status' }, // Changed: Use statusName instead of status to show status name
|
|
3561
3767
|
{ name: 'receivedDate', type: 'date', alias: 'Received Date' }
|
|
3562
3768
|
],
|
|
3563
3769
|
buttons: [
|
|
3770
|
+
// this.inventoryQuickPurchaseButton,
|
|
3564
3771
|
{ name: 'view', dialog: true, detailsConfig: this.inventoryItemDetailsConfig }
|
|
3565
3772
|
],
|
|
3566
3773
|
loadAction: { url: 'inventoryitems/all/x' },
|
|
3567
3774
|
formConfig: this.inventoryItemFormConfig
|
|
3568
3775
|
};
|
|
3776
|
+
//--------------------------Inventory Stock (Grouped by Product)-------------------------
|
|
3777
|
+
// Changed: Reuse existing inventoryItemsTableConfig with product criteria filter
|
|
3778
|
+
this.inventoryStockItemsTableConfig = {
|
|
3779
|
+
...this.inventoryItemsTableConfig,
|
|
3780
|
+
tabTitle: 'Stock Items',
|
|
3781
|
+
showFilter: false,
|
|
3782
|
+
elevation: 'none',
|
|
3783
|
+
flatButtons: true,
|
|
3784
|
+
buttons: [],
|
|
3785
|
+
loadAction: { url: 'inventoryitems/stock/x' }, loadCriteria: 'product', loadIDField: 'productID'
|
|
3786
|
+
};
|
|
3787
|
+
// Changed: Reuse product form config, filter to show only Product Information section fields
|
|
3788
|
+
this.inventoryStockProductFormConfig = {
|
|
3789
|
+
...this.productFormConfig,
|
|
3790
|
+
security: { allow: [this.dataService.capInventoryStock] },
|
|
3791
|
+
fields: this.productFormConfig.fields.filter(f => f.section === 'productInfo' || f.name === 'productInfo').map(f => ({ ...f, readonly: true })),
|
|
3792
|
+
loadAction: { url: 'products/id' }
|
|
3793
|
+
};
|
|
3794
|
+
// Changed: Details config reuses simplified product form and inventory items table
|
|
3795
|
+
this.inventoryStockDetailsConfig = {
|
|
3796
|
+
formConfig: this.inventoryStockProductFormConfig,
|
|
3797
|
+
tableConfigs: [this.inventoryStockItemsTableConfig],
|
|
3798
|
+
heroField: 'productID',
|
|
3799
|
+
buttons: []
|
|
3800
|
+
};
|
|
3801
|
+
// Changed: Table config for inventory stock grouped by product
|
|
3802
|
+
this.inventoryStockTableConfig = {
|
|
3803
|
+
showFilter: true,
|
|
3804
|
+
flatButtons: true,
|
|
3805
|
+
minColumns: ['productName', 'totalQuantity'],
|
|
3806
|
+
columns: [
|
|
3807
|
+
{ name: 'productName', type: 'button', alias: 'Product', detailsConfig: this.inventoryStockDetailsConfig },
|
|
3808
|
+
{ name: 'totalQuantity', type: 'number', alias: 'Total Stock', icon: { name: 'warning', color: 'orange', condition: (x) => x.isLowInventory } }
|
|
3809
|
+
],
|
|
3810
|
+
buttons: [
|
|
3811
|
+
{ name: 'view', dialog: true, detailsConfig: this.inventoryStockDetailsConfig }
|
|
3812
|
+
],
|
|
3813
|
+
loadAction: { url: 'inventoryitems/stock/all' },
|
|
3814
|
+
formConfig: this.productFormConfig
|
|
3815
|
+
};
|
|
3569
3816
|
//--------------------------Inventory Adjustments-------------------------
|
|
3570
3817
|
this.inventoryAdjustmentFormConfig = {
|
|
3571
3818
|
security: { allow: [this.dataService.capInventoryAdjustments] },
|
|
@@ -3630,14 +3877,14 @@ class InventoryService {
|
|
|
3630
3877
|
this.inventoryTransactionsTableConfig = {
|
|
3631
3878
|
showFilter: true,
|
|
3632
3879
|
flatButtons: true,
|
|
3633
|
-
minColumns: ['productName', '
|
|
3880
|
+
minColumns: ['productName', 'transactionTypeName', 'quantity'],
|
|
3634
3881
|
columns: [
|
|
3882
|
+
{ name: 'transactionDate', type: 'date', alias: 'Date' },
|
|
3883
|
+
{ name: 'transactionTypeName', type: 'text', alias: 'Type' },
|
|
3635
3884
|
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3636
|
-
{ name: 'transactionType', type: 'text', alias: 'Type' },
|
|
3637
3885
|
{ name: 'quantity', type: 'number', alias: 'Quantity' },
|
|
3638
3886
|
{ name: 'unitCost', type: 'money', alias: 'Unit Cost' },
|
|
3639
3887
|
{ name: 'totalValue', type: 'money', alias: 'Total Value' },
|
|
3640
|
-
{ name: 'transactionDate', type: 'date', alias: 'Date' },
|
|
3641
3888
|
{ name: 'referenceType', type: 'text', alias: 'Reference' }
|
|
3642
3889
|
],
|
|
3643
3890
|
buttons: [
|
|
@@ -3646,7 +3893,107 @@ class InventoryService {
|
|
|
3646
3893
|
loadAction: { url: 'inventorytransactions/all/x' },
|
|
3647
3894
|
formConfig: this.inventoryTransactionFormConfig
|
|
3648
3895
|
};
|
|
3649
|
-
|
|
3896
|
+
//--------------------------Sale Items-------------------------
|
|
3897
|
+
this.saleItemFormConfig = {
|
|
3898
|
+
security: { allow: [this.dataService.capSales] },
|
|
3899
|
+
title: 'Sale Item',
|
|
3900
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'Add Item' button
|
|
3901
|
+
fields: [
|
|
3902
|
+
{ name: 'productID', type: 'select', required: true, alias: 'Product', span: true, loadAction: { url: 'products/list/x' } }, // Changed: Added span to make field full width
|
|
3903
|
+
{ name: 'quantity', type: 'number', required: true, alias: 'Quantity' },
|
|
3904
|
+
{ name: 'unitPrice', type: 'money', required: true, alias: 'Unit Price' },
|
|
3905
|
+
{ name: 'discount', type: 'money', alias: 'Discount' },
|
|
3906
|
+
{ name: 'inventoryItemID', type: 'select', alias: 'Serial Number', loadAction: { url: 'inventoryitems/list/serialized' } } // Changed: Filter to only show serialized items; lineTotal field removed
|
|
3907
|
+
],
|
|
3908
|
+
loadAction: { url: 'saleitems/id' }
|
|
3909
|
+
};
|
|
3910
|
+
this.saleItemsTableConfig = {
|
|
3911
|
+
tabTitle: 'Items',
|
|
3912
|
+
showFilter: false,
|
|
3913
|
+
elevation: 'none',
|
|
3914
|
+
flatButtons: true,
|
|
3915
|
+
columns: [
|
|
3916
|
+
{ name: 'productName', type: 'text', alias: 'Product' },
|
|
3917
|
+
{ name: 'quantity', type: 'number', alias: 'Quantity' },
|
|
3918
|
+
{ name: 'unitPrice', type: 'money', alias: 'Unit Price' },
|
|
3919
|
+
{ name: 'discount', type: 'money', alias: 'Discount' },
|
|
3920
|
+
{ name: 'lineTotal', type: 'money', alias: 'Line Total' },
|
|
3921
|
+
{ name: 'serialNumber', type: 'text', alias: 'Serial Number' }
|
|
3922
|
+
],
|
|
3923
|
+
buttons: [
|
|
3924
|
+
{ name: 'create', display: 'Add Item', dialog: true, action: { url: 'saleitems?action=create', method: 'post' } },
|
|
3925
|
+
{ name: 'edit', dialog: true, action: { url: 'saleitems?action=edit', method: 'post' } },
|
|
3926
|
+
{ name: 'delete', dialog: true, action: { url: 'saleitems?action=delete', method: 'post' } }
|
|
3927
|
+
],
|
|
3928
|
+
loadAction: { url: 'saleitems/x/x' }, loadCriteria: 'sale', loadIDField: 'saleID',
|
|
3929
|
+
formConfig: this.saleItemFormConfig
|
|
3930
|
+
};
|
|
3931
|
+
//--------------------------Sales-------------------------
|
|
3932
|
+
this.saleFormConfig = {
|
|
3933
|
+
security: { allow: [this.dataService.capSales] },
|
|
3934
|
+
title: 'Sale',
|
|
3935
|
+
fixedTitle: true, // Changed: Use fixedTitle to avoid duplication with 'New Sale' button
|
|
3936
|
+
multiColumn: true,
|
|
3937
|
+
includeAudit: true,
|
|
3938
|
+
fields: [
|
|
3939
|
+
{ name: 'saleInfo', type: 'section', alias: 'Sale Information' },
|
|
3940
|
+
{ name: 'saleNumber', type: 'text', alias: 'Sale #', readonly: true, section: 'saleInfo', hideOnCreate: true, infoMessage: 'Unique identifier for this sale' },
|
|
3941
|
+
{ name: 'saleType', type: 'select', required: true, alias: 'Sale Type', section: 'saleInfo', options: [{ name: 'Quick Sale', value: 0 }, { name: 'From Order', value: 1 }], defaultFirstValue: true, infoMessage: 'Select if this is a quick sale or created from an order' },
|
|
3942
|
+
{ name: 'customerID', type: 'select', alias: 'Customer', section: 'saleInfo', loadAction: { url: 'customers/list/x' }, detailsConfig: this.dataService.customerDetailsConfig, infoMessage: 'Select an existing customer or leave blank for walk-in' },
|
|
3943
|
+
{ name: 'customerName', type: 'text', alias: 'Walk-in Customer Name', section: 'saleInfo', hiddenCondition: x => x.customerID != null, infoMessage: 'Name of walk-in customer (shown when no customer is selected)' },
|
|
3944
|
+
{ name: 'saleDate', type: 'date', required: true, alias: 'Sale Date', section: 'saleInfo', infoMessage: 'Date when the sale was completed' },
|
|
3945
|
+
{ name: 'paymentInfo', type: 'section', alias: 'Payment Information' },
|
|
3946
|
+
{ name: 'paymentMethod', type: 'select', required: true, alias: 'Payment Method', section: 'paymentInfo', options: [{ name: 'Cash', value: 0 }, { name: 'Bank Transfer', value: 1 }, { name: 'Mobile Money', value: 2 }, { name: 'Card', value: 3 }, { name: 'Credit', value: 4 }], defaultFirstValue: true, infoMessage: 'Method of payment used for this sale' },
|
|
3947
|
+
{ name: 'paymentReference', type: 'text', alias: 'Payment Reference', section: 'paymentInfo', infoMessage: 'Transaction reference number or payment receipt' },
|
|
3948
|
+
{ name: 'paymentStatus', type: 'select', alias: 'Payment Status', readonly: true, section: 'paymentInfo', loadAction: { url: 'sales/list/payment-status' }, hideOnCreate: true, infoMessage: 'Current payment status of the sale' },
|
|
3949
|
+
{ name: 'totals', type: 'section', alias: 'Totals', collapsed: true, hideOnCreate: true },
|
|
3950
|
+
{ name: 'subTotal', type: 'money', alias: 'Sub Total', readonly: true, section: 'totals', infoMessage: 'Total before tax and discounts' },
|
|
3951
|
+
{ name: 'taxAmount', type: 'money', alias: 'Tax Amount', section: 'totals', infoMessage: 'Tax amount applied to the sale' },
|
|
3952
|
+
{ name: 'discount', type: 'money', alias: 'Discount', section: 'totals', infoMessage: 'Discount amount applied to the sale' },
|
|
3953
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total Amount', readonly: true, section: 'totals', infoMessage: 'Final amount after tax and discounts' },
|
|
3954
|
+
{ name: 'additionalInfo', type: 'section', alias: 'Additional Information', collapsed: true },
|
|
3955
|
+
{ name: 'notes', type: 'text', alias: 'Notes', span: true, section: 'additionalInfo', infoMessage: 'Additional notes or comments about this sale' }
|
|
3956
|
+
],
|
|
3957
|
+
loadAction: { url: 'sales/id' },
|
|
3958
|
+
heroField: 'saleID'
|
|
3959
|
+
};
|
|
3960
|
+
// Details dialog config for sale with complete button (only visible if not yet paid)
|
|
3961
|
+
this.saleDetailsConfig = {
|
|
3962
|
+
formConfig: this.saleFormConfig,
|
|
3963
|
+
tableConfigs: [this.saleItemsTableConfig],
|
|
3964
|
+
heroField: 'saleID',
|
|
3965
|
+
buttons: [
|
|
3966
|
+
{ name: 'complete', display: 'Complete Sale', color: 'primary', inDialog: true,
|
|
3967
|
+
action: { url: 'sales?action=complete', method: 'post' },
|
|
3968
|
+
confirm: { message: 'Complete this sale? This will reduce inventory and create accounting entries.' },
|
|
3969
|
+
visible: x => x.paymentStatus !== 1
|
|
3970
|
+
}
|
|
3971
|
+
]
|
|
3972
|
+
};
|
|
3973
|
+
this.saleViewButton = { name: 'view', dialog: true, detailsConfig: this.saleDetailsConfig };
|
|
3974
|
+
this.saleCreateButton = { name: 'create', display: 'New Sale', dialog: true,
|
|
3975
|
+
action: { url: 'sales?action=create', method: 'post' },
|
|
3976
|
+
onSuccessButton: this.saleViewButton
|
|
3977
|
+
};
|
|
3978
|
+
this.salesTableConfig = {
|
|
3979
|
+
showFilter: true,
|
|
3980
|
+
flatButtons: true,
|
|
3981
|
+
minColumns: ['saleNumber', 'displayCustomerName', 'totalAmount'],
|
|
3982
|
+
columns: [
|
|
3983
|
+
{ name: 'saleNumber', type: 'text', alias: 'Sale #' },
|
|
3984
|
+
{ name: 'saleTypeName', type: 'chip', alias: 'Type', colors: [{ name: '#4CAF50', condition: x => x.saleType === 0 }, { name: '#2196F3', condition: x => x.saleType === 1 }] },
|
|
3985
|
+
{ name: 'displayCustomerName', type: 'text', alias: 'Customer' },
|
|
3986
|
+
{ name: 'saleDate', type: 'date', alias: 'Date' },
|
|
3987
|
+
{ name: 'paymentMethodName', type: 'text', alias: 'Payment Method' },
|
|
3988
|
+
{ name: 'paymentStatusName', type: 'chip', alias: 'Payment Status', colors: [{ name: '#F44336', condition: x => x.paymentStatus === 0 }, { name: '#4CAF50', condition: x => x.paymentStatus === 1 }, { name: '#FF9800', condition: x => x.paymentStatus === 2 }] },
|
|
3989
|
+
{ name: 'totalAmount', type: 'money', alias: 'Total' }
|
|
3990
|
+
],
|
|
3991
|
+
buttons: [
|
|
3992
|
+
this.saleViewButton, this.saleCreateButton
|
|
3993
|
+
],
|
|
3994
|
+
loadAction: { url: 'sales/all/x' },
|
|
3995
|
+
formConfig: this.saleFormConfig
|
|
3996
|
+
};
|
|
3650
3997
|
this.productDetailsConfig = {
|
|
3651
3998
|
formConfig: this.productFormConfig,
|
|
3652
3999
|
heroField: 'productID',
|
|
@@ -11001,14 +11348,17 @@ class TenantsComponent {
|
|
|
11001
11348
|
tableConfig: this.tenantsTableConfig
|
|
11002
11349
|
};
|
|
11003
11350
|
}
|
|
11004
|
-
ngOnInit() {
|
|
11005
|
-
}
|
|
11006
11351
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TenantsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11007
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TenantsComponent, isStandalone:
|
|
11352
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TenantsComponent, isStandalone: true, selector: "spa-tenants", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11008
11353
|
}
|
|
11009
11354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TenantsComponent, decorators: [{
|
|
11010
11355
|
type: Component,
|
|
11011
|
-
args: [{
|
|
11356
|
+
args: [{
|
|
11357
|
+
selector: 'spa-tenants',
|
|
11358
|
+
standalone: true,
|
|
11359
|
+
imports: [TinSpaModule],
|
|
11360
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11361
|
+
}]
|
|
11012
11362
|
}] });
|
|
11013
11363
|
|
|
11014
11364
|
class BugComponent {
|
|
@@ -11057,14 +11407,17 @@ class MembershipComponent {
|
|
|
11057
11407
|
tableConfig: this.membersTableConfig
|
|
11058
11408
|
};
|
|
11059
11409
|
}
|
|
11060
|
-
ngOnInit() {
|
|
11061
|
-
}
|
|
11062
11410
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: MembershipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11063
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: MembershipComponent, isStandalone:
|
|
11411
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: MembershipComponent, isStandalone: true, selector: "spa-membership", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11064
11412
|
}
|
|
11065
11413
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: MembershipComponent, decorators: [{
|
|
11066
11414
|
type: Component,
|
|
11067
|
-
args: [{
|
|
11415
|
+
args: [{
|
|
11416
|
+
selector: 'spa-membership',
|
|
11417
|
+
standalone: true,
|
|
11418
|
+
imports: [TinSpaModule],
|
|
11419
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11420
|
+
}]
|
|
11068
11421
|
}] });
|
|
11069
11422
|
|
|
11070
11423
|
class PlansComponent {
|
|
@@ -11101,14 +11454,17 @@ class PlansComponent {
|
|
|
11101
11454
|
tableConfig: this.plansTableConfig
|
|
11102
11455
|
};
|
|
11103
11456
|
}
|
|
11104
|
-
ngOnInit() {
|
|
11105
|
-
}
|
|
11106
11457
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PlansComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11107
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: PlansComponent, isStandalone:
|
|
11458
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: PlansComponent, isStandalone: true, selector: "spa-plans", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11108
11459
|
}
|
|
11109
11460
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PlansComponent, decorators: [{
|
|
11110
11461
|
type: Component,
|
|
11111
|
-
args: [{
|
|
11462
|
+
args: [{
|
|
11463
|
+
selector: 'spa-plans',
|
|
11464
|
+
standalone: true,
|
|
11465
|
+
imports: [TinSpaModule],
|
|
11466
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11467
|
+
}]
|
|
11112
11468
|
}] });
|
|
11113
11469
|
|
|
11114
11470
|
class CustomersComponent {
|
|
@@ -11120,15 +11476,17 @@ class CustomersComponent {
|
|
|
11120
11476
|
tableConfig: this.dataService.customersTableConfig
|
|
11121
11477
|
};
|
|
11122
11478
|
}
|
|
11123
|
-
ngOnInit() {
|
|
11124
|
-
// this.loadTenants();
|
|
11125
|
-
}
|
|
11126
11479
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CustomersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11127
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CustomersComponent, isStandalone:
|
|
11480
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CustomersComponent, isStandalone: true, selector: "spa-customers", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11128
11481
|
}
|
|
11129
11482
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CustomersComponent, decorators: [{
|
|
11130
11483
|
type: Component,
|
|
11131
|
-
args: [{
|
|
11484
|
+
args: [{
|
|
11485
|
+
selector: 'spa-customers',
|
|
11486
|
+
standalone: true,
|
|
11487
|
+
imports: [TinSpaModule],
|
|
11488
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11489
|
+
}]
|
|
11132
11490
|
}] });
|
|
11133
11491
|
|
|
11134
11492
|
class SuppliersComponent {
|
|
@@ -11141,14 +11499,17 @@ class SuppliersComponent {
|
|
|
11141
11499
|
tableConfig: this.dataService.suppliersTableConfig
|
|
11142
11500
|
};
|
|
11143
11501
|
}
|
|
11144
|
-
ngOnInit() {
|
|
11145
|
-
}
|
|
11146
11502
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SuppliersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11147
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: SuppliersComponent, isStandalone:
|
|
11503
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: SuppliersComponent, isStandalone: true, selector: "spa-suppliers", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11148
11504
|
}
|
|
11149
11505
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SuppliersComponent, decorators: [{
|
|
11150
11506
|
type: Component,
|
|
11151
|
-
args: [{
|
|
11507
|
+
args: [{
|
|
11508
|
+
selector: 'spa-suppliers',
|
|
11509
|
+
standalone: true,
|
|
11510
|
+
imports: [TinSpaModule],
|
|
11511
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11512
|
+
}]
|
|
11152
11513
|
}] });
|
|
11153
11514
|
|
|
11154
11515
|
class ListDialogComponent {
|
|
@@ -11294,14 +11655,17 @@ class DepartmentsComponent {
|
|
|
11294
11655
|
tableConfig: this.dataService.departmentTableConfig
|
|
11295
11656
|
};
|
|
11296
11657
|
}
|
|
11297
|
-
ngOnInit() {
|
|
11298
|
-
}
|
|
11299
11658
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DepartmentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11300
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: DepartmentsComponent, isStandalone:
|
|
11659
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: DepartmentsComponent, isStandalone: true, selector: "spa-departments", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11301
11660
|
}
|
|
11302
11661
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: DepartmentsComponent, decorators: [{
|
|
11303
11662
|
type: Component,
|
|
11304
|
-
args: [{
|
|
11663
|
+
args: [{
|
|
11664
|
+
selector: 'spa-departments',
|
|
11665
|
+
standalone: true,
|
|
11666
|
+
imports: [TinSpaModule],
|
|
11667
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11668
|
+
}]
|
|
11305
11669
|
}] });
|
|
11306
11670
|
|
|
11307
11671
|
class EmployeesComponent {
|
|
@@ -11313,14 +11677,17 @@ class EmployeesComponent {
|
|
|
11313
11677
|
tableConfig: this.dataService.employeesTableConfig
|
|
11314
11678
|
};
|
|
11315
11679
|
}
|
|
11316
|
-
ngOnInit() {
|
|
11317
|
-
}
|
|
11318
11680
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: EmployeesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11319
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: EmployeesComponent, isStandalone:
|
|
11681
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: EmployeesComponent, isStandalone: true, selector: "spa-employees", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11320
11682
|
}
|
|
11321
11683
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: EmployeesComponent, decorators: [{
|
|
11322
11684
|
type: Component,
|
|
11323
|
-
args: [{
|
|
11685
|
+
args: [{
|
|
11686
|
+
selector: 'spa-employees',
|
|
11687
|
+
standalone: true,
|
|
11688
|
+
imports: [TinSpaModule],
|
|
11689
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11690
|
+
}]
|
|
11324
11691
|
}] });
|
|
11325
11692
|
|
|
11326
11693
|
class PositionsComponent {
|
|
@@ -11332,15 +11699,17 @@ class PositionsComponent {
|
|
|
11332
11699
|
tableConfig: this.dataService.positionsTableConfig
|
|
11333
11700
|
};
|
|
11334
11701
|
}
|
|
11335
|
-
ngOnInit() {
|
|
11336
|
-
// this.dataService.loadPositionMeta();
|
|
11337
|
-
}
|
|
11338
11702
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PositionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11339
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: PositionsComponent, isStandalone:
|
|
11703
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: PositionsComponent, isStandalone: true, selector: "spa-positions", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11340
11704
|
}
|
|
11341
11705
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PositionsComponent, decorators: [{
|
|
11342
11706
|
type: Component,
|
|
11343
|
-
args: [{
|
|
11707
|
+
args: [{
|
|
11708
|
+
selector: 'spa-positions',
|
|
11709
|
+
standalone: true,
|
|
11710
|
+
imports: [TinSpaModule],
|
|
11711
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
11712
|
+
}]
|
|
11344
11713
|
}] });
|
|
11345
11714
|
|
|
11346
11715
|
class GradesComponent {
|
|
@@ -11839,14 +12208,17 @@ class AppModelsComponent {
|
|
|
11839
12208
|
tableConfig: this.appModelTableConfig
|
|
11840
12209
|
};
|
|
11841
12210
|
}
|
|
11842
|
-
ngOnInit() {
|
|
11843
|
-
}
|
|
11844
12211
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AppModelsComponent, deps: [{ token: DataServiceLib }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11845
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: AppModelsComponent, isStandalone:
|
|
12212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: AppModelsComponent, isStandalone: true, selector: "spa-app-models", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
11846
12213
|
}
|
|
11847
12214
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AppModelsComponent, decorators: [{
|
|
11848
12215
|
type: Component,
|
|
11849
|
-
args: [{
|
|
12216
|
+
args: [{
|
|
12217
|
+
selector: 'spa-app-models',
|
|
12218
|
+
standalone: true,
|
|
12219
|
+
imports: [TinSpaModule],
|
|
12220
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
12221
|
+
}]
|
|
11850
12222
|
}], ctorParameters: () => [{ type: DataServiceLib }] });
|
|
11851
12223
|
|
|
11852
12224
|
class NotificationsConfigComponent {
|
|
@@ -12027,215 +12399,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
12027
12399
|
type: Input
|
|
12028
12400
|
}] } });
|
|
12029
12401
|
|
|
12030
|
-
|
|
12031
|
-
|
|
12032
|
-
|
|
12033
|
-
this.
|
|
12034
|
-
|
|
12035
|
-
|
|
12036
|
-
tiles: [
|
|
12037
|
-
{ name: 'totalAssets', alias: 'Total Assets', color: '#2196F3', info: 'Total value of all asset accounts' },
|
|
12038
|
-
{ name: 'totalLiabilities', alias: 'Total Liabilities', color: '#F44336', info: 'Total value of all liability accounts' },
|
|
12039
|
-
{ name: 'totalRevenue', alias: 'Revenue', color: '#9C27B0', info: 'Total revenue from all sources' },
|
|
12040
|
-
{ name: 'totalExpense', alias: 'Expenses', color: '#FF9800', info: 'Total expenses across all accounts' },
|
|
12041
|
-
{ name: 'totalEquity', alias: 'Total Equity', color: '#4CAF50', info: 'Total value of all equity accounts' },
|
|
12042
|
-
]
|
|
12402
|
+
class LoanProductsComponent {
|
|
12403
|
+
constructor() {
|
|
12404
|
+
this.loansService = inject(LoansService);
|
|
12405
|
+
this.pageConfig = {
|
|
12406
|
+
title: 'Loan Products',
|
|
12407
|
+
tableConfig: this.loansService.loanProductTableConfig
|
|
12043
12408
|
};
|
|
12044
|
-
// Configure tabs with separate load and count actions for lazy loading
|
|
12045
|
-
this.accountTabConfigs = [
|
|
12046
|
-
{
|
|
12047
|
-
...this.accountingService.accountsTableConfig,
|
|
12048
|
-
tabTitle: 'Assets',
|
|
12049
|
-
loadAction: { url: 'accounts/type/asset' },
|
|
12050
|
-
countAction: { url: 'accounts/count/asset' }
|
|
12051
|
-
},
|
|
12052
|
-
{
|
|
12053
|
-
...this.accountingService.accountsTableConfig,
|
|
12054
|
-
tabTitle: 'Liabilities',
|
|
12055
|
-
loadAction: { url: 'accounts/type/liability' },
|
|
12056
|
-
countAction: { url: 'accounts/count/liability' }
|
|
12057
|
-
},
|
|
12058
|
-
{
|
|
12059
|
-
...this.accountingService.accountsTableConfig,
|
|
12060
|
-
tabTitle: 'Income',
|
|
12061
|
-
loadAction: { url: 'accounts/type/income' },
|
|
12062
|
-
countAction: { url: 'accounts/count/income' }
|
|
12063
|
-
},
|
|
12064
|
-
{
|
|
12065
|
-
...this.accountingService.accountsTableConfig,
|
|
12066
|
-
tabTitle: 'Expenses',
|
|
12067
|
-
loadAction: { url: 'accounts/type/expense' },
|
|
12068
|
-
countAction: { url: 'accounts/count/expense' }
|
|
12069
|
-
},
|
|
12070
|
-
{
|
|
12071
|
-
...this.accountingService.accountsTableConfig,
|
|
12072
|
-
tabTitle: 'Equity',
|
|
12073
|
-
loadAction: { url: 'accounts/type/equity' },
|
|
12074
|
-
countAction: { url: 'accounts/count/equity' }
|
|
12075
|
-
},
|
|
12076
|
-
{
|
|
12077
|
-
...this.accountingService.accountsTableConfig,
|
|
12078
|
-
tabTitle: 'Aggregate',
|
|
12079
|
-
loadAction: { url: 'accounts/type/aggregate' },
|
|
12080
|
-
countAction: { url: 'accounts/count/aggregate' },
|
|
12081
|
-
buttons: [...this.accountingService.accountsTableConfig.buttons.filter(x => x.name == 'view')]
|
|
12082
|
-
}
|
|
12083
|
-
];
|
|
12084
|
-
}
|
|
12085
|
-
ngOnInit() {
|
|
12086
|
-
this.loadSummaryData();
|
|
12087
|
-
}
|
|
12088
|
-
loadSummaryData() {
|
|
12089
|
-
this.dataServiceLib.CallApi({ url: 'accounts/summary/x' }, '').subscribe((apiResponse) => {
|
|
12090
|
-
if (apiResponse.success) {
|
|
12091
|
-
this.summaryData = apiResponse.data;
|
|
12092
|
-
}
|
|
12093
|
-
});
|
|
12094
12409
|
}
|
|
12095
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type:
|
|
12096
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type:
|
|
12410
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanProductsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12411
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoanProductsComponent, isStandalone: true, selector: "spa-loan-products", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12097
12412
|
}
|
|
12098
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type:
|
|
12413
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanProductsComponent, decorators: [{
|
|
12099
12414
|
type: Component,
|
|
12100
|
-
args: [{
|
|
12101
|
-
|
|
12415
|
+
args: [{
|
|
12416
|
+
selector: 'spa-loan-products',
|
|
12417
|
+
standalone: true,
|
|
12418
|
+
imports: [TinSpaModule],
|
|
12419
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
12420
|
+
}]
|
|
12421
|
+
}] });
|
|
12102
12422
|
|
|
12103
|
-
|
|
12104
|
-
class TransactionTypesComponent {
|
|
12423
|
+
class LoansComponent {
|
|
12105
12424
|
constructor() {
|
|
12106
|
-
this.
|
|
12107
|
-
this.pageConfig = {
|
|
12108
|
-
title: 'Transaction Types',
|
|
12109
|
-
tableConfig: this.accountingService.transactionTypesTableConfig
|
|
12110
|
-
};
|
|
12111
|
-
}
|
|
12112
|
-
ngOnInit() {
|
|
12113
|
-
}
|
|
12114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionTypesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TransactionTypesComponent, isStandalone: false, selector: "spa-transaction-types", ngImport: i0, template: "<!-- Migrated from Shift src/app/home/default/fin-transaction-types/fin-transaction-types.component.html -->\r\n<spa-page [config]=\"pageConfig\"></spa-page>\r\n", styles: [""], dependencies: [{ kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12116
|
-
}
|
|
12117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionTypesComponent, decorators: [{
|
|
12118
|
-
type: Component,
|
|
12119
|
-
args: [{ selector: 'spa-transaction-types', standalone: false, template: "<!-- Migrated from Shift src/app/home/default/fin-transaction-types/fin-transaction-types.component.html -->\r\n<spa-page [config]=\"pageConfig\"></spa-page>\r\n" }]
|
|
12120
|
-
}] });
|
|
12121
|
-
|
|
12122
|
-
// Migrated from Shift src/app/home/default/fin-transactions/fin-transactions.component.ts
|
|
12123
|
-
class TransactionsComponent {
|
|
12124
|
-
constructor() {
|
|
12125
|
-
this.accountingService = inject(AccountingService);
|
|
12126
|
-
this.pageConfig = {
|
|
12127
|
-
title: 'Transactions',
|
|
12128
|
-
tableConfig: this.accountingService.transactionsTableConfig
|
|
12129
|
-
};
|
|
12130
|
-
}
|
|
12131
|
-
ngOnInit() {
|
|
12132
|
-
}
|
|
12133
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12134
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TransactionsComponent, isStandalone: false, selector: "spa-transactions", ngImport: i0, template: "<!-- Migrated from Shift src/app/home/default/fin-transactions/fin-transactions.component.html -->\r\n<spa-page [config]=\"pageConfig\"></spa-page>\r\n", styles: [""], dependencies: [{ kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12135
|
-
}
|
|
12136
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionsComponent, decorators: [{
|
|
12137
|
-
type: Component,
|
|
12138
|
-
args: [{ selector: 'spa-transactions', standalone: false, template: "<!-- Migrated from Shift src/app/home/default/fin-transactions/fin-transactions.component.html -->\r\n<spa-page [config]=\"pageConfig\"></spa-page>\r\n" }]
|
|
12139
|
-
}] });
|
|
12140
|
-
|
|
12141
|
-
// Invoice management component for tin-spa library
|
|
12142
|
-
class InvoicesComponent {
|
|
12143
|
-
constructor() {
|
|
12144
|
-
this.accountingService = inject(AccountingService);
|
|
12145
|
-
this.httpService = inject(HttpService);
|
|
12146
|
-
this.http = inject(HttpClient);
|
|
12147
|
-
this.messageService = inject(MessageService);
|
|
12148
|
-
this.pageConfig = {
|
|
12149
|
-
title: 'Invoices',
|
|
12150
|
-
tableConfig: this.accountingService.invoicesTableConfig
|
|
12151
|
-
};
|
|
12152
|
-
}
|
|
12153
|
-
ngOnInit() {
|
|
12154
|
-
}
|
|
12155
|
-
// Handle action click events from the table
|
|
12156
|
-
actionClicked(event) {
|
|
12157
|
-
if (event.name === 'pdf') {
|
|
12158
|
-
this.messageService.confirm(`Download Invoice ?`).subscribe((result) => {
|
|
12159
|
-
if (result == "yes") {
|
|
12160
|
-
this.download(event.data);
|
|
12161
|
-
}
|
|
12162
|
-
});
|
|
12163
|
-
}
|
|
12164
|
-
}
|
|
12165
|
-
// Download invoice as PDF
|
|
12166
|
-
download(invoice) {
|
|
12167
|
-
this.http.post(`${this.httpService.apiUrl}invoices/pdf?action=x`, invoice, { responseType: 'blob' })
|
|
12168
|
-
.subscribe((response) => {
|
|
12169
|
-
const blob = new Blob([response], { type: 'application/pdf' });
|
|
12170
|
-
const url = window.URL.createObjectURL(blob);
|
|
12171
|
-
const link = document.createElement('a');
|
|
12172
|
-
link.href = url;
|
|
12173
|
-
link.download = `Invoice_${invoice.invoiceID}.pdf`;
|
|
12174
|
-
link.click();
|
|
12175
|
-
window.URL.revokeObjectURL(url);
|
|
12176
|
-
});
|
|
12177
|
-
}
|
|
12178
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InvoicesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: InvoicesComponent, isStandalone: false, selector: "spa-invoices", ngImport: i0, template: "<!-- Invoice management page -->\r\n<h4>Invoices</h4>\r\n<hr>\r\n<div class=\"mt-3\" style=\"font-size: 14px;\">\r\n <spa-table [config]=\"accountingService.invoicesTableConfig\" (actionClick)=\"actionClicked($event)\"></spa-table>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: TableComponent, selector: "spa-table", inputs: ["data", "tileData", "config", "reload", "activeTab", "inTab"], outputs: ["dataLoad", "actionSuccess", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange", "actionResponse"] }] }); }
|
|
12180
|
-
}
|
|
12181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InvoicesComponent, decorators: [{
|
|
12182
|
-
type: Component,
|
|
12183
|
-
args: [{ selector: 'spa-invoices', standalone: false, template: "<!-- Invoice management page -->\r\n<h4>Invoices</h4>\r\n<hr>\r\n<div class=\"mt-3\" style=\"font-size: 14px;\">\r\n <spa-table [config]=\"accountingService.invoicesTableConfig\" (actionClick)=\"actionClicked($event)\"></spa-table>\r\n</div>\r\n" }]
|
|
12184
|
-
}] });
|
|
12185
|
-
|
|
12186
|
-
// Outstanding invoices component for tin-spa library
|
|
12187
|
-
class OutstandingInvoicesComponent {
|
|
12188
|
-
constructor() {
|
|
12189
|
-
this.accountingService = inject(AccountingService);
|
|
12190
|
-
this.pageConfig = {
|
|
12191
|
-
title: 'Outstanding Invoices',
|
|
12192
|
-
tableConfig: this.accountingService.outstandingInvoicesTableConfig
|
|
12193
|
-
};
|
|
12194
|
-
}
|
|
12195
|
-
ngOnInit() {
|
|
12196
|
-
}
|
|
12197
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: OutstandingInvoicesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12198
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: OutstandingInvoicesComponent, isStandalone: false, selector: "spa-outstanding-invoices", ngImport: i0, template: "<!-- Outstanding invoices page -->\r\n<h4>Outstanding Invoices</h4>\r\n<hr>\r\n\r\n<div class=\"mt-3\" style=\"font-size: 14px;\">\r\n <spa-table [config]=\"accountingService.outstandingInvoicesTableConfig\"></spa-table>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: TableComponent, selector: "spa-table", inputs: ["data", "tileData", "config", "reload", "activeTab", "inTab"], outputs: ["dataLoad", "actionSuccess", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange", "actionResponse"] }] }); }
|
|
12199
|
-
}
|
|
12200
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: OutstandingInvoicesComponent, decorators: [{
|
|
12201
|
-
type: Component,
|
|
12202
|
-
args: [{ selector: 'spa-outstanding-invoices', standalone: false, template: "<!-- Outstanding invoices page -->\r\n<h4>Outstanding Invoices</h4>\r\n<hr>\r\n\r\n<div class=\"mt-3\" style=\"font-size: 14px;\">\r\n <spa-table [config]=\"accountingService.outstandingInvoicesTableConfig\"></spa-table>\r\n</div>\r\n" }]
|
|
12203
|
-
}] });
|
|
12204
|
-
|
|
12205
|
-
class LoanProductsComponent {
|
|
12206
|
-
constructor() {
|
|
12207
|
-
this.loansService = inject(LoansService);
|
|
12208
|
-
this.pageConfig = {
|
|
12209
|
-
title: 'Loan Products',
|
|
12210
|
-
tableConfig: this.loansService.loanProductTableConfig
|
|
12211
|
-
};
|
|
12212
|
-
}
|
|
12213
|
-
ngOnInit() {
|
|
12214
|
-
}
|
|
12215
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanProductsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12216
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoanProductsComponent, isStandalone: false, selector: "spa-loan-products", ngImport: i0, template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n", styles: [""], dependencies: [{ kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12217
|
-
}
|
|
12218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanProductsComponent, decorators: [{
|
|
12219
|
-
type: Component,
|
|
12220
|
-
args: [{ selector: 'spa-loan-products', standalone: false, template: "<spa-page [config]=\"pageConfig\"></spa-page>\r\n" }]
|
|
12221
|
-
}] });
|
|
12222
|
-
|
|
12223
|
-
class LoansComponent {
|
|
12224
|
-
constructor() {
|
|
12225
|
-
this.loansService = inject(LoansService);
|
|
12425
|
+
this.loansService = inject(LoansService);
|
|
12226
12426
|
this.pageConfig = {
|
|
12227
12427
|
title: 'Loans',
|
|
12228
12428
|
tableConfig: this.loansService.loanTableConfig
|
|
12229
12429
|
};
|
|
12230
12430
|
}
|
|
12231
|
-
ngOnInit() {
|
|
12232
|
-
}
|
|
12233
12431
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoansComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12234
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoansComponent, isStandalone:
|
|
12432
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoansComponent, isStandalone: true, selector: "spa-loans", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12235
12433
|
}
|
|
12236
12434
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoansComponent, decorators: [{
|
|
12237
12435
|
type: Component,
|
|
12238
|
-
args: [{
|
|
12436
|
+
args: [{
|
|
12437
|
+
selector: 'spa-loans',
|
|
12438
|
+
standalone: true,
|
|
12439
|
+
imports: [TinSpaModule],
|
|
12440
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
12441
|
+
}]
|
|
12239
12442
|
}] });
|
|
12240
12443
|
|
|
12241
12444
|
class LoanPaymentsComponent {
|
|
@@ -12246,14 +12449,17 @@ class LoanPaymentsComponent {
|
|
|
12246
12449
|
tableConfig: this.loansService.loanPaymentTableConfig
|
|
12247
12450
|
};
|
|
12248
12451
|
}
|
|
12249
|
-
ngOnInit() {
|
|
12250
|
-
}
|
|
12251
12452
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanPaymentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12252
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoanPaymentsComponent, isStandalone:
|
|
12453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: LoanPaymentsComponent, isStandalone: true, selector: "spa-loan-payments", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
12253
12454
|
}
|
|
12254
12455
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: LoanPaymentsComponent, decorators: [{
|
|
12255
12456
|
type: Component,
|
|
12256
|
-
args: [{
|
|
12457
|
+
args: [{
|
|
12458
|
+
selector: 'spa-loan-payments',
|
|
12459
|
+
standalone: true,
|
|
12460
|
+
imports: [TinSpaModule],
|
|
12461
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
12462
|
+
}]
|
|
12257
12463
|
}] });
|
|
12258
12464
|
|
|
12259
12465
|
class TinSpaModule {
|
|
@@ -12261,20 +12467,20 @@ class TinSpaModule {
|
|
|
12261
12467
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: TinSpaModule, declarations: [TinSpaComponent, TextComponent, CheckComponent, DateComponent, DatetimeComponent, LabelComponent, SelectComponent,
|
|
12262
12468
|
ActivityComponent, FilterComponent, messageDialog, MoneyComponent, OptionComponent, TilesComponent, StepsComponent,
|
|
12263
12469
|
AttachComponent, ChipsComponent, LoaderComponent, NavMenuComponent, TableComponent, TableInternalComponent, DetailsDialog, DetailsDialogInternal, FormComponent, CamelToWordsPipe, NumberComponent, SearchComponent, ViewerComponent, viewerDialog,
|
|
12264
|
-
TenantSettingsComponent,
|
|
12265
|
-
SuppliersComponent,
|
|
12470
|
+
TenantSettingsComponent, BugComponent,
|
|
12266
12471
|
ListDialogComponent, TasksComponent,
|
|
12267
|
-
|
|
12472
|
+
GradesComponent, WelcomeComponent, NotificationsComponent, InvitationsTableComponent,
|
|
12268
12473
|
TableHeaderComponent, TableRowComponent, TableActionComponent,
|
|
12269
12474
|
AlertComponent, EmailComponent, PageComponent, SelectCommonComponent, SelectInternalComponent, SuffixComponent, SelectContextDirective, SelectLiteComponent,
|
|
12270
12475
|
TableLiteComponent, DetailsDialogLite, ApprovalsComponent, ApprovalsConfigComponent, MultiTextComponent,
|
|
12271
|
-
MultiSelectComponent, SelectBitwiseComponent,
|
|
12272
|
-
HtmlComponent, NotesComponent, CapsulesComponent, CardsComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent,
|
|
12273
|
-
AccountsComponent, TransactionTypesComponent, TransactionsComponent, InvoicesComponent, OutstandingInvoicesComponent,
|
|
12274
|
-
LoanProductsComponent, LoansComponent, LoanPaymentsComponent], imports: [SpaMatModule,
|
|
12476
|
+
MultiSelectComponent, SelectBitwiseComponent, NotificationsConfigComponent,
|
|
12477
|
+
HtmlComponent, NotesComponent, CapsulesComponent, CardsComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent], imports: [SpaMatModule,
|
|
12275
12478
|
HttpClientModule,
|
|
12276
12479
|
CurrencyInputModule,
|
|
12277
|
-
NgxDocViewerModule
|
|
12480
|
+
NgxDocViewerModule,
|
|
12481
|
+
TenantsComponent, MembershipComponent, PlansComponent, CustomersComponent,
|
|
12482
|
+
SuppliersComponent, DepartmentsComponent, EmployeesComponent, PositionsComponent,
|
|
12483
|
+
AppModelsComponent, LoanProductsComponent, LoansComponent, LoanPaymentsComponent], exports: [TinSpaComponent,
|
|
12278
12484
|
SpaMatModule,
|
|
12279
12485
|
AlertComponent,
|
|
12280
12486
|
TextComponent,
|
|
@@ -12304,16 +12510,15 @@ class TinSpaModule {
|
|
|
12304
12510
|
ViewerComponent,
|
|
12305
12511
|
viewerDialog,
|
|
12306
12512
|
ListDialogComponent,
|
|
12307
|
-
CustomersComponent,
|
|
12308
|
-
SuppliersComponent,
|
|
12309
12513
|
ListDialogComponent, TasksComponent,
|
|
12310
|
-
|
|
12514
|
+
GradesComponent,
|
|
12311
12515
|
WelcomeComponent, EmailComponent, PageComponent,
|
|
12312
12516
|
HtmlComponent,
|
|
12313
12517
|
NotesComponent,
|
|
12314
12518
|
CapsulesComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent,
|
|
12315
|
-
|
|
12316
|
-
|
|
12519
|
+
TenantsComponent, MembershipComponent, PlansComponent, CustomersComponent,
|
|
12520
|
+
SuppliersComponent, DepartmentsComponent, EmployeesComponent, PositionsComponent,
|
|
12521
|
+
AppModelsComponent, LoanProductsComponent, LoansComponent, LoanPaymentsComponent] }); }
|
|
12317
12522
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TinSpaModule, providers: [
|
|
12318
12523
|
{ provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },
|
|
12319
12524
|
{ provide: LocationStrategy, useClass: HashLocationStrategy },
|
|
@@ -12324,7 +12529,10 @@ class TinSpaModule {
|
|
|
12324
12529
|
], imports: [SpaMatModule,
|
|
12325
12530
|
HttpClientModule,
|
|
12326
12531
|
CurrencyInputModule,
|
|
12327
|
-
NgxDocViewerModule,
|
|
12532
|
+
NgxDocViewerModule,
|
|
12533
|
+
TenantsComponent, MembershipComponent, PlansComponent, CustomersComponent,
|
|
12534
|
+
SuppliersComponent, DepartmentsComponent, EmployeesComponent, PositionsComponent,
|
|
12535
|
+
AppModelsComponent, LoanProductsComponent, LoansComponent, LoanPaymentsComponent, SpaMatModule] }); }
|
|
12328
12536
|
}
|
|
12329
12537
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TinSpaModule, decorators: [{
|
|
12330
12538
|
type: NgModule,
|
|
@@ -12333,23 +12541,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
12333
12541
|
TinSpaComponent, TextComponent, CheckComponent, DateComponent, DatetimeComponent, LabelComponent, SelectComponent,
|
|
12334
12542
|
ActivityComponent, FilterComponent, messageDialog, MoneyComponent, OptionComponent, TilesComponent, StepsComponent,
|
|
12335
12543
|
AttachComponent, ChipsComponent, LoaderComponent, NavMenuComponent, TableComponent, TableInternalComponent, DetailsDialog, DetailsDialogInternal, FormComponent, CamelToWordsPipe, NumberComponent, SearchComponent, ViewerComponent, viewerDialog,
|
|
12336
|
-
TenantSettingsComponent,
|
|
12337
|
-
SuppliersComponent,
|
|
12544
|
+
TenantSettingsComponent, BugComponent,
|
|
12338
12545
|
ListDialogComponent, TasksComponent,
|
|
12339
|
-
|
|
12546
|
+
GradesComponent, WelcomeComponent, NotificationsComponent, InvitationsTableComponent,
|
|
12340
12547
|
TableHeaderComponent, TableRowComponent, TableActionComponent,
|
|
12341
12548
|
AlertComponent, EmailComponent, PageComponent, SelectCommonComponent, SelectInternalComponent, SuffixComponent, SelectContextDirective, SelectLiteComponent,
|
|
12342
12549
|
TableLiteComponent, DetailsDialogLite, ApprovalsComponent, ApprovalsConfigComponent, MultiTextComponent,
|
|
12343
|
-
MultiSelectComponent, SelectBitwiseComponent,
|
|
12344
|
-
HtmlComponent, NotesComponent, CapsulesComponent, CardsComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent
|
|
12345
|
-
AccountsComponent, TransactionTypesComponent, TransactionsComponent, InvoicesComponent, OutstandingInvoicesComponent,
|
|
12346
|
-
LoanProductsComponent, LoansComponent, LoanPaymentsComponent
|
|
12550
|
+
MultiSelectComponent, SelectBitwiseComponent, NotificationsConfigComponent,
|
|
12551
|
+
HtmlComponent, NotesComponent, CapsulesComponent, CardsComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent
|
|
12347
12552
|
],
|
|
12348
12553
|
imports: [
|
|
12349
12554
|
SpaMatModule,
|
|
12350
12555
|
HttpClientModule,
|
|
12351
12556
|
CurrencyInputModule,
|
|
12352
12557
|
NgxDocViewerModule,
|
|
12558
|
+
TenantsComponent, MembershipComponent, PlansComponent, CustomersComponent,
|
|
12559
|
+
SuppliersComponent, DepartmentsComponent, EmployeesComponent, PositionsComponent,
|
|
12560
|
+
AppModelsComponent, LoanProductsComponent, LoansComponent, LoanPaymentsComponent
|
|
12353
12561
|
],
|
|
12354
12562
|
exports: [
|
|
12355
12563
|
TinSpaComponent,
|
|
@@ -12382,16 +12590,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
12382
12590
|
ViewerComponent,
|
|
12383
12591
|
viewerDialog,
|
|
12384
12592
|
ListDialogComponent,
|
|
12385
|
-
CustomersComponent,
|
|
12386
|
-
SuppliersComponent,
|
|
12387
12593
|
ListDialogComponent, TasksComponent,
|
|
12388
|
-
|
|
12594
|
+
GradesComponent,
|
|
12389
12595
|
WelcomeComponent, EmailComponent, PageComponent,
|
|
12390
12596
|
HtmlComponent,
|
|
12391
12597
|
NotesComponent,
|
|
12392
12598
|
CapsulesComponent, TabsComponent, StatusesComponent, GroupsComponent, TitleActionsComponent,
|
|
12393
|
-
|
|
12394
|
-
|
|
12599
|
+
TenantsComponent, MembershipComponent, PlansComponent, CustomersComponent,
|
|
12600
|
+
SuppliersComponent, DepartmentsComponent, EmployeesComponent, PositionsComponent,
|
|
12601
|
+
AppModelsComponent, LoanProductsComponent, LoansComponent, LoanPaymentsComponent
|
|
12395
12602
|
],
|
|
12396
12603
|
providers: [
|
|
12397
12604
|
{ provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },
|
|
@@ -13395,11 +13602,16 @@ class CategoriesComponent {
|
|
|
13395
13602
|
};
|
|
13396
13603
|
}
|
|
13397
13604
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CategoriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13398
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CategoriesComponent, isStandalone:
|
|
13605
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: CategoriesComponent, isStandalone: true, selector: "spa-categories", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13399
13606
|
}
|
|
13400
13607
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: CategoriesComponent, decorators: [{
|
|
13401
13608
|
type: Component,
|
|
13402
|
-
args: [{
|
|
13609
|
+
args: [{
|
|
13610
|
+
selector: 'spa-categories',
|
|
13611
|
+
standalone: true,
|
|
13612
|
+
imports: [TinSpaModule],
|
|
13613
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
13614
|
+
}]
|
|
13403
13615
|
}] });
|
|
13404
13616
|
|
|
13405
13617
|
class SubCategoriesComponent {
|
|
@@ -13411,11 +13623,16 @@ class SubCategoriesComponent {
|
|
|
13411
13623
|
};
|
|
13412
13624
|
}
|
|
13413
13625
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SubCategoriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13414
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: SubCategoriesComponent, isStandalone:
|
|
13626
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: SubCategoriesComponent, isStandalone: true, selector: "spa-subcategories", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13415
13627
|
}
|
|
13416
13628
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SubCategoriesComponent, decorators: [{
|
|
13417
13629
|
type: Component,
|
|
13418
|
-
args: [{
|
|
13630
|
+
args: [{
|
|
13631
|
+
selector: 'spa-subcategories',
|
|
13632
|
+
standalone: true,
|
|
13633
|
+
imports: [TinSpaModule],
|
|
13634
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
13635
|
+
}]
|
|
13419
13636
|
}] });
|
|
13420
13637
|
|
|
13421
13638
|
class BrandsComponent {
|
|
@@ -13427,11 +13644,16 @@ class BrandsComponent {
|
|
|
13427
13644
|
};
|
|
13428
13645
|
}
|
|
13429
13646
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: BrandsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13430
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: BrandsComponent, isStandalone:
|
|
13647
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: BrandsComponent, isStandalone: true, selector: "spa-brands", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13431
13648
|
}
|
|
13432
13649
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: BrandsComponent, decorators: [{
|
|
13433
13650
|
type: Component,
|
|
13434
|
-
args: [{
|
|
13651
|
+
args: [{
|
|
13652
|
+
selector: 'spa-brands',
|
|
13653
|
+
standalone: true,
|
|
13654
|
+
imports: [TinSpaModule],
|
|
13655
|
+
template: '<spa-page [config]="pageConfig"></spa-page>'
|
|
13656
|
+
}]
|
|
13435
13657
|
}] });
|
|
13436
13658
|
|
|
13437
13659
|
class SpaAdminModule {
|
|
@@ -13441,13 +13663,13 @@ class SpaAdminModule {
|
|
|
13441
13663
|
addRoleDialog,
|
|
13442
13664
|
CreateAccountComponent,
|
|
13443
13665
|
LogsComponent,
|
|
13444
|
-
SettingsComponent,
|
|
13445
|
-
CategoriesComponent,
|
|
13446
|
-
SubCategoriesComponent,
|
|
13447
|
-
BrandsComponent], imports: [i2$2.ReactiveFormsModule, CommonModule,
|
|
13666
|
+
SettingsComponent], imports: [i2$2.ReactiveFormsModule, CommonModule,
|
|
13448
13667
|
FormsModule,
|
|
13449
13668
|
ReactiveFormsModule,
|
|
13450
|
-
TinSpaModule
|
|
13669
|
+
TinSpaModule,
|
|
13670
|
+
CategoriesComponent,
|
|
13671
|
+
SubCategoriesComponent,
|
|
13672
|
+
BrandsComponent], exports: [CommonModule,
|
|
13451
13673
|
FormsModule,
|
|
13452
13674
|
TinSpaModule,
|
|
13453
13675
|
UsersComponent,
|
|
@@ -13463,7 +13685,10 @@ class SpaAdminModule {
|
|
|
13463
13685
|
CommonModule,
|
|
13464
13686
|
FormsModule,
|
|
13465
13687
|
ReactiveFormsModule,
|
|
13466
|
-
TinSpaModule,
|
|
13688
|
+
TinSpaModule,
|
|
13689
|
+
CategoriesComponent,
|
|
13690
|
+
SubCategoriesComponent,
|
|
13691
|
+
BrandsComponent, CommonModule,
|
|
13467
13692
|
FormsModule,
|
|
13468
13693
|
TinSpaModule] }); }
|
|
13469
13694
|
}
|
|
@@ -13476,17 +13701,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13476
13701
|
addRoleDialog,
|
|
13477
13702
|
CreateAccountComponent,
|
|
13478
13703
|
LogsComponent,
|
|
13479
|
-
SettingsComponent
|
|
13480
|
-
CategoriesComponent,
|
|
13481
|
-
SubCategoriesComponent,
|
|
13482
|
-
BrandsComponent
|
|
13704
|
+
SettingsComponent
|
|
13483
13705
|
],
|
|
13484
13706
|
imports: [
|
|
13485
13707
|
ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: "never" }),
|
|
13486
13708
|
CommonModule,
|
|
13487
13709
|
FormsModule,
|
|
13488
13710
|
ReactiveFormsModule,
|
|
13489
|
-
TinSpaModule
|
|
13711
|
+
TinSpaModule,
|
|
13712
|
+
CategoriesComponent,
|
|
13713
|
+
SubCategoriesComponent,
|
|
13714
|
+
BrandsComponent
|
|
13490
13715
|
],
|
|
13491
13716
|
exports: [
|
|
13492
13717
|
CommonModule,
|
|
@@ -13546,6 +13771,223 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13546
13771
|
}]
|
|
13547
13772
|
}] });
|
|
13548
13773
|
|
|
13774
|
+
// Migrated from Shift src/app/home/default/fin-accounts/fin-accounts.component.ts
|
|
13775
|
+
class AccountsComponent {
|
|
13776
|
+
constructor(dataServiceLib, accountingService) {
|
|
13777
|
+
this.dataServiceLib = dataServiceLib;
|
|
13778
|
+
this.accountingService = accountingService;
|
|
13779
|
+
this.accountTileConfig = {
|
|
13780
|
+
tiles: [
|
|
13781
|
+
{ name: 'totalAssets', alias: 'Total Assets', color: '#2196F3', info: 'Total value of all asset accounts' },
|
|
13782
|
+
{ name: 'totalLiabilities', alias: 'Total Liabilities', color: '#F44336', info: 'Total value of all liability accounts' },
|
|
13783
|
+
{ name: 'totalRevenue', alias: 'Revenue', color: '#9C27B0', info: 'Total revenue from all sources' },
|
|
13784
|
+
{ name: 'totalExpense', alias: 'Expenses', color: '#FF9800', info: 'Total expenses across all accounts' },
|
|
13785
|
+
{ name: 'totalEquity', alias: 'Total Equity', color: '#4CAF50', info: 'Total value of all equity accounts' },
|
|
13786
|
+
]
|
|
13787
|
+
};
|
|
13788
|
+
this.accountTabConfigs = [
|
|
13789
|
+
{
|
|
13790
|
+
...this.accountingService.accountsTableConfig,
|
|
13791
|
+
tabTitle: 'Assets',
|
|
13792
|
+
loadAction: { url: 'accounts/type/asset' },
|
|
13793
|
+
countAction: { url: 'accounts/count/asset' }
|
|
13794
|
+
},
|
|
13795
|
+
{
|
|
13796
|
+
...this.accountingService.accountsTableConfig,
|
|
13797
|
+
tabTitle: 'Liabilities',
|
|
13798
|
+
loadAction: { url: 'accounts/type/liability' },
|
|
13799
|
+
countAction: { url: 'accounts/count/liability' }
|
|
13800
|
+
},
|
|
13801
|
+
{
|
|
13802
|
+
...this.accountingService.accountsTableConfig,
|
|
13803
|
+
tabTitle: 'Income',
|
|
13804
|
+
loadAction: { url: 'accounts/type/income' },
|
|
13805
|
+
countAction: { url: 'accounts/count/income' }
|
|
13806
|
+
},
|
|
13807
|
+
{
|
|
13808
|
+
...this.accountingService.accountsTableConfig,
|
|
13809
|
+
tabTitle: 'Expenses',
|
|
13810
|
+
loadAction: { url: 'accounts/type/expense' },
|
|
13811
|
+
countAction: { url: 'accounts/count/expense' }
|
|
13812
|
+
},
|
|
13813
|
+
{
|
|
13814
|
+
...this.accountingService.accountsTableConfig,
|
|
13815
|
+
tabTitle: 'Equity',
|
|
13816
|
+
loadAction: { url: 'accounts/type/equity' },
|
|
13817
|
+
countAction: { url: 'accounts/count/equity' }
|
|
13818
|
+
},
|
|
13819
|
+
{
|
|
13820
|
+
...this.accountingService.accountsTableConfig,
|
|
13821
|
+
tabTitle: 'Aggregate',
|
|
13822
|
+
loadAction: { url: 'accounts/type/aggregate' },
|
|
13823
|
+
countAction: { url: 'accounts/count/aggregate' },
|
|
13824
|
+
buttons: [...this.accountingService.accountsTableConfig.buttons.filter(x => x.name == 'view')]
|
|
13825
|
+
}
|
|
13826
|
+
];
|
|
13827
|
+
}
|
|
13828
|
+
ngOnInit() {
|
|
13829
|
+
this.loadSummaryData();
|
|
13830
|
+
}
|
|
13831
|
+
loadSummaryData() {
|
|
13832
|
+
this.dataServiceLib.CallApi({ url: 'accounts/summary/x' }, '').subscribe((apiResponse) => {
|
|
13833
|
+
if (apiResponse.success) {
|
|
13834
|
+
this.summaryData = apiResponse.data;
|
|
13835
|
+
}
|
|
13836
|
+
});
|
|
13837
|
+
}
|
|
13838
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AccountsComponent, deps: [{ token: DataServiceLib }, { token: AccountingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13839
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: AccountsComponent, isStandalone: true, selector: "spa-accounts", ngImport: i0, template: `
|
|
13840
|
+
<h4>Accounts</h4>
|
|
13841
|
+
<hr>
|
|
13842
|
+
|
|
13843
|
+
<div *ngIf="summaryData" class="mt-3 mb-3">
|
|
13844
|
+
<spa-tiles [config]="accountTileConfig" [data]="summaryData"></spa-tiles>
|
|
13845
|
+
</div>
|
|
13846
|
+
|
|
13847
|
+
<spa-tabs [tableConfigs]="accountTabConfigs"></spa-tabs>
|
|
13848
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TilesComponent, selector: "spa-tiles", inputs: ["config", "lastSearch", "data", "reload"], outputs: ["tileActionSelected", "tileClick", "tileUnClick"] }, { kind: "component", type: TabsComponent, selector: "spa-tabs", inputs: ["tableConfigs"] }] }); }
|
|
13849
|
+
}
|
|
13850
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AccountsComponent, decorators: [{
|
|
13851
|
+
type: Component,
|
|
13852
|
+
args: [{
|
|
13853
|
+
selector: 'spa-accounts',
|
|
13854
|
+
template: `
|
|
13855
|
+
<h4>Accounts</h4>
|
|
13856
|
+
<hr>
|
|
13857
|
+
|
|
13858
|
+
<div *ngIf="summaryData" class="mt-3 mb-3">
|
|
13859
|
+
<spa-tiles [config]="accountTileConfig" [data]="summaryData"></spa-tiles>
|
|
13860
|
+
</div>
|
|
13861
|
+
|
|
13862
|
+
<spa-tabs [tableConfigs]="accountTabConfigs"></spa-tabs>
|
|
13863
|
+
`,
|
|
13864
|
+
standalone: true,
|
|
13865
|
+
imports: [TinSpaModule],
|
|
13866
|
+
}]
|
|
13867
|
+
}], ctorParameters: () => [{ type: DataServiceLib }, { type: AccountingService }] });
|
|
13868
|
+
|
|
13869
|
+
// Migrated from Shift src/app/home/default/fin-transaction-types/fin-transaction-types.component.ts
|
|
13870
|
+
class TransactionTypesComponent {
|
|
13871
|
+
constructor() {
|
|
13872
|
+
this.accountingService = inject(AccountingService);
|
|
13873
|
+
this.pageConfig = {
|
|
13874
|
+
title: 'Transaction Types',
|
|
13875
|
+
tableConfig: this.accountingService.transactionTypesTableConfig
|
|
13876
|
+
};
|
|
13877
|
+
}
|
|
13878
|
+
ngOnInit() {
|
|
13879
|
+
}
|
|
13880
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionTypesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13881
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TransactionTypesComponent, isStandalone: true, selector: "spa-transaction-types", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13882
|
+
}
|
|
13883
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionTypesComponent, decorators: [{
|
|
13884
|
+
type: Component,
|
|
13885
|
+
args: [{
|
|
13886
|
+
selector: 'spa-transaction-types',
|
|
13887
|
+
template: '<spa-page [config]="pageConfig"></spa-page>',
|
|
13888
|
+
standalone: true,
|
|
13889
|
+
imports: [TinSpaModule],
|
|
13890
|
+
}]
|
|
13891
|
+
}] });
|
|
13892
|
+
|
|
13893
|
+
// Migrated from Shift src/app/home/default/fin-transactions/fin-transactions.component.ts
|
|
13894
|
+
class TransactionsComponent {
|
|
13895
|
+
constructor() {
|
|
13896
|
+
this.accountingService = inject(AccountingService);
|
|
13897
|
+
this.pageConfig = {
|
|
13898
|
+
title: 'Transactions',
|
|
13899
|
+
tableConfig: this.accountingService.transactionsTableConfig
|
|
13900
|
+
};
|
|
13901
|
+
}
|
|
13902
|
+
ngOnInit() {
|
|
13903
|
+
}
|
|
13904
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13905
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: TransactionsComponent, isStandalone: true, selector: "spa-transactions", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13906
|
+
}
|
|
13907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TransactionsComponent, decorators: [{
|
|
13908
|
+
type: Component,
|
|
13909
|
+
args: [{
|
|
13910
|
+
selector: 'spa-transactions',
|
|
13911
|
+
template: '<spa-page [config]="pageConfig"></spa-page>',
|
|
13912
|
+
standalone: true,
|
|
13913
|
+
imports: [TinSpaModule],
|
|
13914
|
+
}]
|
|
13915
|
+
}] });
|
|
13916
|
+
|
|
13917
|
+
// Invoice management component for tin-spa library
|
|
13918
|
+
class InvoicesComponent {
|
|
13919
|
+
constructor() {
|
|
13920
|
+
this.accountingService = inject(AccountingService);
|
|
13921
|
+
this.httpService = inject(HttpService);
|
|
13922
|
+
this.http = inject(HttpClient);
|
|
13923
|
+
this.messageService = inject(MessageService);
|
|
13924
|
+
this.pageConfig = {
|
|
13925
|
+
title: 'Invoices',
|
|
13926
|
+
tableConfig: this.accountingService.invoicesTableConfig
|
|
13927
|
+
};
|
|
13928
|
+
}
|
|
13929
|
+
ngOnInit() {
|
|
13930
|
+
}
|
|
13931
|
+
// Handle action click events from the table
|
|
13932
|
+
actionClicked(event) {
|
|
13933
|
+
if (event.name === 'pdf') {
|
|
13934
|
+
this.messageService.confirm(`Download Invoice ?`).subscribe((result) => {
|
|
13935
|
+
if (result == "yes") {
|
|
13936
|
+
this.download(event.data);
|
|
13937
|
+
}
|
|
13938
|
+
});
|
|
13939
|
+
}
|
|
13940
|
+
}
|
|
13941
|
+
// Download invoice as PDF
|
|
13942
|
+
download(invoice) {
|
|
13943
|
+
this.http.post(`${this.httpService.apiUrl}invoices/pdf?action=x`, invoice, { responseType: 'blob' })
|
|
13944
|
+
.subscribe((response) => {
|
|
13945
|
+
const blob = new Blob([response], { type: 'application/pdf' });
|
|
13946
|
+
const url = window.URL.createObjectURL(blob);
|
|
13947
|
+
const link = document.createElement('a');
|
|
13948
|
+
link.href = url;
|
|
13949
|
+
link.download = `Invoice_${invoice.invoiceID}.pdf`;
|
|
13950
|
+
link.click();
|
|
13951
|
+
window.URL.revokeObjectURL(url);
|
|
13952
|
+
});
|
|
13953
|
+
}
|
|
13954
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InvoicesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13955
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: InvoicesComponent, isStandalone: true, selector: "spa-invoices", ngImport: i0, template: '<spa-page [config]="pageConfig" (actionClick)="actionClicked($event)"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13956
|
+
}
|
|
13957
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InvoicesComponent, decorators: [{
|
|
13958
|
+
type: Component,
|
|
13959
|
+
args: [{
|
|
13960
|
+
selector: 'spa-invoices',
|
|
13961
|
+
template: '<spa-page [config]="pageConfig" (actionClick)="actionClicked($event)"></spa-page>',
|
|
13962
|
+
standalone: true,
|
|
13963
|
+
imports: [TinSpaModule],
|
|
13964
|
+
}]
|
|
13965
|
+
}] });
|
|
13966
|
+
|
|
13967
|
+
// Outstanding invoices component for tin-spa library
|
|
13968
|
+
class OutstandingInvoicesComponent {
|
|
13969
|
+
constructor() {
|
|
13970
|
+
this.accountingService = inject(AccountingService);
|
|
13971
|
+
this.pageConfig = {
|
|
13972
|
+
title: 'Outstanding Invoices',
|
|
13973
|
+
tableConfig: this.accountingService.outstandingInvoicesTableConfig
|
|
13974
|
+
};
|
|
13975
|
+
}
|
|
13976
|
+
ngOnInit() {
|
|
13977
|
+
}
|
|
13978
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: OutstandingInvoicesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13979
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: OutstandingInvoicesComponent, isStandalone: true, selector: "spa-outstanding-invoices", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
13980
|
+
}
|
|
13981
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: OutstandingInvoicesComponent, decorators: [{
|
|
13982
|
+
type: Component,
|
|
13983
|
+
args: [{
|
|
13984
|
+
selector: 'spa-outstanding-invoices',
|
|
13985
|
+
template: '<spa-page [config]="pageConfig"></spa-page>',
|
|
13986
|
+
standalone: true,
|
|
13987
|
+
imports: [TinSpaModule],
|
|
13988
|
+
}]
|
|
13989
|
+
}] });
|
|
13990
|
+
|
|
13549
13991
|
// Component now uses centralized inventory service for configurations
|
|
13550
13992
|
class ProductsComponent {
|
|
13551
13993
|
constructor() {
|
|
@@ -13592,6 +14034,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13592
14034
|
}]
|
|
13593
14035
|
}] });
|
|
13594
14036
|
|
|
14037
|
+
class PurchaseOrdersComponent {
|
|
14038
|
+
constructor() {
|
|
14039
|
+
this.inventoryService = inject(InventoryService);
|
|
14040
|
+
this.pageConfig = {
|
|
14041
|
+
title: 'Purchase Orders',
|
|
14042
|
+
tableConfig: this.inventoryService.purchaseOrdersTableConfig
|
|
14043
|
+
};
|
|
14044
|
+
}
|
|
14045
|
+
ngOnInit() { }
|
|
14046
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PurchaseOrdersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14047
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: PurchaseOrdersComponent, isStandalone: true, selector: "spa-purchase-orders", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
14048
|
+
}
|
|
14049
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: PurchaseOrdersComponent, decorators: [{
|
|
14050
|
+
type: Component,
|
|
14051
|
+
args: [{
|
|
14052
|
+
selector: 'spa-purchase-orders',
|
|
14053
|
+
template: '<spa-page [config]="pageConfig"></spa-page>',
|
|
14054
|
+
standalone: true,
|
|
14055
|
+
imports: [TinSpaModule],
|
|
14056
|
+
}]
|
|
14057
|
+
}] });
|
|
14058
|
+
|
|
13595
14059
|
// Component now uses centralized inventory service for configurations
|
|
13596
14060
|
class InventoryReceiptsComponent {
|
|
13597
14061
|
constructor() {
|
|
@@ -13661,6 +14125,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13661
14125
|
}]
|
|
13662
14126
|
}] });
|
|
13663
14127
|
|
|
14128
|
+
class SalesComponent {
|
|
14129
|
+
constructor() {
|
|
14130
|
+
this.inventoryService = inject(InventoryService);
|
|
14131
|
+
this.config = {
|
|
14132
|
+
title: 'Sales',
|
|
14133
|
+
tableConfig: this.inventoryService.salesTableConfig
|
|
14134
|
+
};
|
|
14135
|
+
}
|
|
14136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SalesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: SalesComponent, isStandalone: true, selector: "app-sales", ngImport: i0, template: '<spa-page [config]="config"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
14138
|
+
}
|
|
14139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: SalesComponent, decorators: [{
|
|
14140
|
+
type: Component,
|
|
14141
|
+
args: [{
|
|
14142
|
+
selector: 'app-sales',
|
|
14143
|
+
template: '<spa-page [config]="config"></spa-page>',
|
|
14144
|
+
standalone: true,
|
|
14145
|
+
imports: [TinSpaModule]
|
|
14146
|
+
}]
|
|
14147
|
+
}] });
|
|
14148
|
+
|
|
13664
14149
|
// Component now uses centralized inventory service for configurations
|
|
13665
14150
|
class InventoryAdjustmentsComponent {
|
|
13666
14151
|
constructor() {
|
|
@@ -13800,6 +14285,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13800
14285
|
}]
|
|
13801
14286
|
}], ctorParameters: () => [] });
|
|
13802
14287
|
|
|
14288
|
+
// Component to display inventory stock grouped by product
|
|
14289
|
+
class InventoryStockComponent {
|
|
14290
|
+
constructor() {
|
|
14291
|
+
this.inventoryService = inject(InventoryService);
|
|
14292
|
+
this.pageConfig = {
|
|
14293
|
+
title: 'Inventory Stock',
|
|
14294
|
+
tableConfig: this.inventoryService.inventoryStockTableConfig
|
|
14295
|
+
};
|
|
14296
|
+
}
|
|
14297
|
+
ngOnInit() { }
|
|
14298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InventoryStockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14299
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: InventoryStockComponent, isStandalone: true, selector: "spa-inventory-stock", ngImport: i0, template: '<spa-page [config]="pageConfig"></spa-page>', isInline: true, dependencies: [{ kind: "ngmodule", type: TinSpaModule }, { kind: "component", type: PageComponent, selector: "spa-page", inputs: ["config"], outputs: ["searchModeActivated", "searchModeDeactivated", "refreshClick", "actionClick", "actionResponse", "inputChange", "createClick", "searchClick", "dataLoad", "titleActionChange"] }] }); }
|
|
14300
|
+
}
|
|
14301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: InventoryStockComponent, decorators: [{
|
|
14302
|
+
type: Component,
|
|
14303
|
+
args: [{
|
|
14304
|
+
selector: 'spa-inventory-stock',
|
|
14305
|
+
template: '<spa-page [config]="pageConfig"></spa-page>',
|
|
14306
|
+
standalone: true,
|
|
14307
|
+
imports: [TinSpaModule],
|
|
14308
|
+
}]
|
|
14309
|
+
}] });
|
|
14310
|
+
|
|
13803
14311
|
const routes$1 = [
|
|
13804
14312
|
{ path: "users", component: UsersComponent },
|
|
13805
14313
|
{ path: "roles", component: RolesComponent },
|
|
@@ -13837,14 +14345,17 @@ const routes$1 = [
|
|
|
13837
14345
|
{ path: "loans-payments", component: LoanPaymentsComponent },
|
|
13838
14346
|
{ path: "inventory-products", component: ProductsComponent },
|
|
13839
14347
|
{ path: "inventory-items", component: InventoryItemsComponent },
|
|
14348
|
+
{ path: "purchase-orders", component: PurchaseOrdersComponent },
|
|
13840
14349
|
{ path: "inventory-receipts", component: InventoryReceiptsComponent },
|
|
13841
14350
|
{ path: "inventory-requisitions", component: RequisitionsComponent },
|
|
13842
14351
|
{ path: "inventory-sales-orders", component: SalesOrdersComponent },
|
|
14352
|
+
{ path: "inventory-sales", component: SalesComponent },
|
|
13843
14353
|
{ path: "inventory-adjustments", component: InventoryAdjustmentsComponent },
|
|
13844
14354
|
{ path: "inventory-returns", component: InventoryReturnsComponent },
|
|
13845
14355
|
{ path: "inventory-requisition-returns", component: RequisitionReturnsComponent },
|
|
13846
14356
|
{ path: "inventory-transactions", component: InventoryTransactionsComponent },
|
|
13847
|
-
{ path: "inventory-dashboard", component: InventoryDashboardComponent }
|
|
14357
|
+
{ path: "inventory-dashboard", component: InventoryDashboardComponent },
|
|
14358
|
+
{ path: "inventory-stock", component: InventoryStockComponent } // Changed: Added inventory stock route
|
|
13848
14359
|
];
|
|
13849
14360
|
class AdminRoutingModule {
|
|
13850
14361
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AdminRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -13927,5 +14438,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
13927
14438
|
* Generated bundle index. Do not edit.
|
|
13928
14439
|
*/
|
|
13929
14440
|
|
|
13930
|
-
export { Account, AccountsComponent as AccountingAccountsComponent, InvoicesComponent as AccountingInvoicesComponent, OutstandingInvoicesComponent as AccountingOutstandingInvoicesComponent, AccountingService, TransactionTypesComponent as AccountingTransactionTypesComponent, TransactionsComponent as AccountingTransactionsComponent, Action, ActivityComponent, AdminModule, AlertComponent, AlertConfig, AlertMessage, ApiResponse, AppConfig, AttachComponent, AuthService, BrandsComponent, CapItem, CapsulesComponent, CategoriesComponent, ChangePasswordComponent, ChangeUserPassword, CheckComponent, ChipsComponent, Constants, Core, CreateAccountComponent, CustomersComponent, DataServiceLib, DateComponent, DatetimeComponent, DepartmentsComponent, DetailsDialog, DetailsDialogConfig, DetailsDialogProcessor, DetailsSource, DialogService, EmailComponent, EmployeesComponent, ExportService, FilterComponent, FormComponent, FormConfig, GeneralService, GradesComponent, GroupsComponent, HtmlComponent, HttpService, IndexModule, InventoryService, InvoiceStatus, LabelComponent, ListDialogComponent, ListDialogConfig, LoaderComponent, LoaderService, LoanPaymentsComponent, LoanProductsComponent, LoansComponent, LoansService, LogLevel, LogService, LoginComponent, LogsComponent, MessageService, MoneyComponent, MovementType, MultiSelectComponent, MultiTextComponent, NavMenuComponent, NotesComponent, NotesConfig, NumberComponent, OptionComponent, PageComponent, PageConfig, PositionsComponent, Profile, ProfileComponent, RecoverAccountComponent, Register, Role, RoleAccess, RolesComponent, SearchComponent, SearchConfig, SecurityConfig, SelectBitwiseComponent, SelectComponent, SettingsComponent, SignupComponent, SpaAdminModule, SpaIndexModule, SpaMatModule, SpaUserModule, StatusesComponent, Step, StepConfig, StepsComponent, StorageService, SubCategoriesComponent, SuppliersComponent, TableComponent, TableConfig, TabsComponent, TasksComponent, TextComponent, TileConfig, TilesComponent, TinSpaComponent, TinSpaModule, TinSpaService, TitleActionsComponent, User, UserModule, UsersComponent, ViewerComponent, WelcomeComponent, addRoleDialog, authGuard, dialogOptions, loginConfig, messageDialog, viewerDialog };
|
|
14441
|
+
export { Account, AccountsComponent as AccountingAccountsComponent, InvoicesComponent as AccountingInvoicesComponent, OutstandingInvoicesComponent as AccountingOutstandingInvoicesComponent, AccountingService, TransactionTypesComponent as AccountingTransactionTypesComponent, TransactionsComponent as AccountingTransactionsComponent, Action, ActivityComponent, AdminModule, AlertComponent, AlertConfig, AlertMessage, ApiResponse, AppConfig, AppModelsComponent, AttachComponent, AuthService, BrandsComponent, CapItem, CapsulesComponent, CategoriesComponent, ChangePasswordComponent, ChangeUserPassword, CheckComponent, ChipsComponent, Constants, Core, CreateAccountComponent, CustomersComponent, DataServiceLib, DateComponent, DatetimeComponent, DepartmentsComponent, DetailsDialog, DetailsDialogConfig, DetailsDialogProcessor, DetailsSource, DialogService, EmailComponent, EmployeesComponent, ExportService, FilterComponent, FormComponent, FormConfig, GeneralService, GradesComponent, GroupsComponent, HtmlComponent, HttpService, IndexModule, InventoryReceiptStatus, InventoryService, InvoiceStatus, LabelComponent, ListDialogComponent, ListDialogConfig, LoaderComponent, LoaderService, LoanPaymentsComponent, LoanProductsComponent, LoansComponent, LoansService, LogLevel, LogService, LoginComponent, LogsComponent, MembershipComponent, MessageService, MoneyComponent, MovementType, MultiSelectComponent, MultiTextComponent, NavMenuComponent, NotesComponent, NotesConfig, NumberComponent, OptionComponent, PageComponent, PageConfig, PlansComponent, PositionsComponent, Profile, ProfileComponent, RecoverAccountComponent, Register, Role, RoleAccess, RolesComponent, SearchComponent, SearchConfig, SecurityConfig, SelectBitwiseComponent, SelectComponent, SettingsComponent, SignupComponent, SpaAdminModule, SpaIndexModule, SpaMatModule, SpaUserModule, StatusesComponent, Step, StepConfig, StepsComponent, StorageService, SubCategoriesComponent, SuppliersComponent, TableComponent, TableConfig, TabsComponent, TasksComponent, TenantsComponent, TextComponent, TileConfig, TilesComponent, TinSpaComponent, TinSpaModule, TinSpaService, TitleActionsComponent, UnitOfMeasure, User, UserModule, UsersComponent, ViewerComponent, WelcomeComponent, addRoleDialog, authGuard, dialogOptions, loginConfig, messageDialog, viewerDialog };
|
|
13931
14442
|
//# sourceMappingURL=tin-spa.mjs.map
|