Escali License control 1
CustomerTable.razor
Gå til dokumentasjonen til denne filen.
1@implements IDisposable
2@inject CustomerViewModel _customerViewService
3@inject StateService _stateService
4@inject AgreementElementViewModel _agreementElementViewService
5@inject UserViewModel _userViewService
6@inject PriorityViewModel _priorityViewService
7@inject AgreementViewModel _agreementViewModel
8@inject ProductViewModel _productViewModel
9@inject CurrencyViewModel _currencyViewModel
10
11<CustomerTableButtons UsersCustomerFilter="ToggleUsersCustomerFilter"
12 ExpiredAgreementsFilter="ToggleExpiredAgreementsFilter" CustomerSearchFilter="ToggleCustomerSearchFilter"/>
13
14@if (_customerViewService.Customers != null)
15{
16 <TableNested Items="_customerViewService.Customers.Where(UsersCustomersFilter).Where(CustomerSearchFilter).ToList()">
17 <TableHeader>
18 <td>Kunde m/avtaler</td>
19 <td>Kostnad pr. mnd.</td>
20 <td></td>
21 </TableHeader>
22 <RowTemplate>
23 <td>@context.CustomerName</td>
24 <td>
25 @(_agreementElementViewService.AgreementElements != null && DataUtils.GetCustomerAgreementElements(context.CustomerSeq!.Value, _agreementElementViewService.AgreementElements).Any()
26 ? DataUtils.GetCustomerAgreementElements(context.CustomerSeq!.Value, _agreementElementViewService.AgreementElements).Select(a => a.Price).Aggregate((acc, x) => acc + x)
27 : "Ingen avtaler")
28
29 </td>
30 <td>@(context.UserSeq != null ? _userViewService.Users?.Single(u => u.UserSeq == context.UserSeq).UserEmail : "Ingen kundeansvarlig")</td>
31 <td class="table-col-last">
32 <Dropdown Options="CreateDropdownOptions(context)" />
33 </td>
34 </RowTemplate>
35
36 <ChildRowTemplate>
37
38 <NestedRows Items="context.Agreements" Context="agreement">
39 <RowTemplate>
40 <td>@_productViewModel.Products?.SingleOrDefault(p => p.ProductSeq == agreement.ProductSeq)?.ProductName</td>
41 <td></td>
42 <td></td>
43 <td class="table-col-last">
44 <div class="button-icon">
45 <img alt="" src="Icons/vertical-dots-icon.svg" style="cursor: pointer"/>
46 </div>
47 </td>
48 </RowTemplate>
49
50 <ChildRowTemplate>
51
52 @if (_agreementElementViewService.AgreementElements != null)
53 {
54
55 @foreach (var ae in _agreementElementViewService.AgreementElements.Where(ae => ae.Agreement.AgreementSeq == agreement.AgreementSeq).ToList())
56 {
57 <tr class="table-data-third">
58 <td class="table-col-first"></td>
59 <td>@ae.ModuleLevel?.ModuleLevelName</td>
60 <td>@ae.Price @ae.Agreement?.Currency?.CurrencyName</td>
61 <td>@ae.DateFrom.ToPrettyDate()-@ae.DateTo.ToPrettyDate()</td>
62 <td class="table-col-last">
63 <Dropdown Options="CreateDropdownOptionsForAgreement(ae)" />
64 </td>
65 </tr>
66 }
67
68 }
69
70 </ChildRowTemplate>
71 </NestedRows>
72 </ChildRowTemplate>
73
74
75
76 </TableNested>
77
78 <AddAgreementModal />
79 <EditCustomerModal />
80 <UpgradeAgreement />
81}
82
83@code {
84
85 private bool ShowOnlyUsersCustomers { get; set; }
86 private void ToggleUsersCustomerFilter(bool filter) => ShowOnlyUsersCustomers = filter;
87 private Func<CustomerClientModel, bool> UsersCustomersFilter => c => !ShowOnlyUsersCustomers || c.UserSeq == _stateService.SelectedUserSeq.Value;
88
89 private bool ShowExpiredAgreements { get; set; }
90 private void ToggleExpiredAgreementsFilter(bool filter) => ShowExpiredAgreements = filter;
91 private Func<AgreementElementClientModel, bool> ExpiredAgreementsFilter => a => ShowExpiredAgreements || !a.DateTo.DateHasPassed();
92
93 private string CustomerSearch { get; set; } = "";
94 private void ToggleCustomerSearchFilter(ChangeEventArgs e) => CustomerSearch = (string) e.Value;
95 private Func<CustomerClientModel, bool> CustomerSearchFilter => c => c.CustomerName.ToLower().Contains(CustomerSearch.ToLower());
96
97 private (string, Action)[] CreateDropdownOptions(CustomerClientModel context)
98 {
99 return new (string, Action)[] {
100 ("Oppdater kunde", () => _stateService.UpdateEditCustomer(context)),
101 ("Ny avtale", () => _stateService.UpdateAddAgreementCustomer(context.CustomerSeq!.Value)),
102 };
103 }
104
105 private (string, Action)[] CreateDropdownOptionsForAgreement(AgreementElementClientModel ae)
106 {
107 return new (string, Action)[] {
108 ("Oppgrader avtale", () => _stateService.UpdateAgreementElement(ae) )
109 };
110 }
111
112 protected override void OnInitialized()
113 {
114 _customerViewService.DataChanged += StateHasChanged;
115 _agreementElementViewService.DataChanged += StateHasChanged;
116 _priorityViewService.DataChanged += StateHasChanged;
117 _agreementViewModel.DataChanged += StateHasChanged;
118 _currencyViewModel.DataChanged += StateHasChanged;
119
120 _stateService.SelectedUserSeq.ValueChanged += StateHasChanged;
121 _stateService.EditCustomer.ValueChanged += StateHasChanged;
122 }
123
124 void IDisposable.Dispose()
125 {
126 _customerViewService.DataChanged -= StateHasChanged;
127 _agreementElementViewService.DataChanged -= StateHasChanged;
128 _priorityViewService.DataChanged -= StateHasChanged;
129 _agreementViewModel.DataChanged -= StateHasChanged;
130 _currencyViewModel.DataChanged -= StateHasChanged;
131
132 _stateService.SelectedUserSeq.ValueChanged -= StateHasChanged;
133 _stateService.EditCustomer.ValueChanged -= StateHasChanged;
134 }
135
136}