From e98904713305293525cf45de0c7150cc28d45266 Mon Sep 17 00:00:00 2001 From: David Paquette Date: Sat, 14 May 2022 07:44:51 -0600 Subject: [PATCH] Build Emergency Kits Feature (#157) * Ability to add and edit base kits from admin app * Solution architecture diagram from diagrams.net * Admin App: Add new base kits and refactored Base Kit properties * Client App: Build A Kit page * Added ability to fetch emergency kits by baseKitId * Add description to BaseKit * Client App: Build a kit for each base kit type * Client App: Create New Kit * Client App: Edit Emergency Kits * Rename EmergencyKitCreate to EmergencyKitDetails * Fix undefined error Co-authored-by: David Paquette --- 2wr-app/public/images/kits/build-a-kit.png | Bin 0 -> 47084 bytes 2wr-app/public/images/kits/go-kit.png | Bin 0 -> 6075 bytes 2wr-app/public/images/kits/work-kit.png | Bin 1874 -> 7432 bytes 2wr-app/src/api/emergency-kit-api.js | 4 +- .../emergency-kits/emergency-kit-build.vue | 71 ++++ .../emergency-kits/emergency-kit-create.vue | 366 ------------------ .../emergency-kits/emergency-kit-details.vue | 317 +++++++++++++++ .../emergency-kits/emergency-kit-edit.vue | 332 ---------------- .../emergency-kits/emergency-kit-list.vue | 135 ++++--- .../components/prepare/prepare-landing.vue | 2 +- 2wr-app/src/router/index.js | 26 +- .../emergency-kits/emergency-kit-store.js | 4 +- .../emergency-kits/emergency-kit-build.vue | 14 + .../emergency-kits/emergency-kit-create.vue | 14 - .../emergency-kits/emergency-kit-details.vue | 14 + .../emergency-kits/emergency-kit-edit.vue | 14 - TwoWeeksReady.Common/EmergencyKits/BaseKit.cs | 7 +- .../EmergencyKits/BaseKitItem.cs | 11 +- TwoWeeksReady.Common/EmergencyKits/Kit.cs | 9 +- TwoWeeksReady.Common/EmergencyKits/KitItem.cs | 3 + .../Components/KitItemDisplay.razor | 99 +++-- .../Data/FunctionsRepository.cs | 2 +- .../Data/StubRepository.cs | 8 +- .../Pages/Kits/Details.razor | 93 ++++- .../TwoWeeksReady.Admin/Pages/Kits/List.razor | 18 +- .../EmergencyKits/BaseKitsApi.cs | 8 +- .../EmergencyKits/EmergencyKitsApi.cs | 23 +- solution architecture.xml | 1 + 28 files changed, 688 insertions(+), 907 deletions(-) create mode 100644 2wr-app/public/images/kits/build-a-kit.png create mode 100644 2wr-app/public/images/kits/go-kit.png create mode 100644 2wr-app/src/components/prepare/emergency-kits/emergency-kit-build.vue delete mode 100644 2wr-app/src/components/prepare/emergency-kits/emergency-kit-create.vue create mode 100644 2wr-app/src/components/prepare/emergency-kits/emergency-kit-details.vue delete mode 100644 2wr-app/src/components/prepare/emergency-kits/emergency-kit-edit.vue create mode 100644 2wr-app/src/views/prepare/emergency-kits/emergency-kit-build.vue delete mode 100644 2wr-app/src/views/prepare/emergency-kits/emergency-kit-create.vue create mode 100644 2wr-app/src/views/prepare/emergency-kits/emergency-kit-details.vue delete mode 100644 2wr-app/src/views/prepare/emergency-kits/emergency-kit-edit.vue create mode 100644 solution architecture.xml diff --git a/2wr-app/public/images/kits/build-a-kit.png b/2wr-app/public/images/kits/build-a-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea7366c7c36eaea69e9e94062184a9dfb6f8e1a GIT binary patch literal 47084 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 literal 0 HcmV?d00001 diff --git a/2wr-app/public/images/kits/go-kit.png b/2wr-app/public/images/kits/go-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ea374cb8b1b5a018b53be0f7bc8ee8c1e082a4 GIT binary patch literal 6075 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 literal 1874 zcmV-Y2d(&tP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc0%TB3R7L;)|2iro z{`uLi+TA)TBd*%r-(V*G`Psf%EAH~z`PHd9DkGzmg3#vM@w0!f+TGt^CW3Ng(p@Rd z=itDa!4 zcgxy$%-wsZ#(T}&e$3i`&Dw%UErib7g|NzoRx*dr+lSEFh|k%L(cF#E-ICGUmQF31 z!_t}4+?-x9pw`@=*V?1c*reLzsMy@9+S#nz+O1S9uG-zP-{Z2}-Lv54wA|dZ;N!I6 z=e6PIw&Lfv;^(;D-MQY}y58No-`Tu-LA~JJzTn-z;n~39+Q8-K!MvuybTUc-~f#^~zDqOP$>-(E z=i$refzJq+tlaV)a&Kd>E71p z+t%yg*6ZQd>D$)PL7Cg1Mf-|pYw?AhS#+u-iq z;_%_)?%L(=+U9U5=kVF*@Z9L|+UW7z>3lHie=_Rv+UoP)>wPKfektpMGwbr&>+;;} zhdk`^+U_1g87EcN!;_4eEL_S*ND zEcec#_?#{Hrce0y+xe+e`S;rTr9}FyRr;-2`mbC5`PoJ03~!%PE!C75Fju> zKtN1POkiYiaDae_h>MVvl$e{KsIb7$(A?nY@bvhy!PPMU00c%!L_t(&-tC!*cN0Y% z$5W3K@c>c8tAfXvRG>mbYP?bvv8V_-(0aBCTG4PsnzAvq+IkgYTeTW09%VhK4b%%# zO#lKJl2-={m9nf<qi(~82Rcwae|e@tz;WkHAoa+z0r{a? zApAa0n1qQMBN&q&+ymDT2Lwr(3}lgp*noUkhk$Xl5LqR1N+9SEhzb{FL{weNZYR`x z>zeAkK@_a_(1Cb-SW$;m0vE0fw+_QVR6z77DI=n)h9LrIISzV}H;C(yCxC;fwjKp! z5|iNya9ANqn52eCjNaB^J))|nX3@;PR3KE%Y+g`8@u_v^N>k|&8lgDifpw4D`!mZ(QJ#t5nv@)9mzbzKMXPTg+T0;v>H6XO1im?GCL?S#8WxM zScW5x3xvdL*h!>=Tg+^PBXGJ9@v9NRYosEGWES!D_n>da$H$Kf#39fp?}1p2!G1_R zwLi=zVipGCARI)65U;-vdZw|l@qU4L9JKj%5UVlRN5MWp?FU)JBR7Fo(IyZ#g6^Sj ztcLdP&e=84TTShovx(S!2k1W91mZ!^bM%eX(B88-`!w`6QTwG6MRSK3?R|Sd$(=U= zHl1hp^$sNUh_Syj)4$~hVz)Mj57M^35HWVr zu*oFktDUG(z*#F>UD%+zMkW6(a{(aiK@^Fs}{HGuAd_9_2t zc&kJpt`;dM(oxI6HF>RMrrJW7Z!$NDou$}uYWqsM!F-s1I-AVXf|wZT?T$nuo$WXj z3iS#IrHtKjSBYg7ON3$ePx}q=Up%5gM308RjsO4v M07*qoM6N<$f}F+zT>t<8 diff --git a/2wr-app/src/api/emergency-kit-api.js b/2wr-app/src/api/emergency-kit-api.js index 80834b3..7b21740 100644 --- a/2wr-app/src/api/emergency-kit-api.js +++ b/2wr-app/src/api/emergency-kit-api.js @@ -1,8 +1,8 @@ import baseApiInstance from './base-api-instance'; const emergencyKitApi = { - async getAll() { - return (await baseApiInstance.getInstance()).get('emergencykits'); + async getAllByBaseKitId(baseKitId) { + return (await baseApiInstance.getInstance()).get(`emergencykits/${baseKitId}`); }, async getById(id) { return (await baseApiInstance.getInstance()).get(`emergencykit-by-id/${id}`); diff --git a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-build.vue b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-build.vue new file mode 100644 index 0000000..1fa96bc --- /dev/null +++ b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-build.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-create.vue b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-create.vue deleted file mode 100644 index 2451dee..0000000 --- a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-create.vue +++ /dev/null @@ -1,366 +0,0 @@ - - - \ No newline at end of file diff --git a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-details.vue b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-details.vue new file mode 100644 index 0000000..a05ff24 --- /dev/null +++ b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-details.vue @@ -0,0 +1,317 @@ + + + \ No newline at end of file diff --git a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-edit.vue b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-edit.vue deleted file mode 100644 index 8f45dce..0000000 --- a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-edit.vue +++ /dev/null @@ -1,332 +0,0 @@ - - - \ No newline at end of file diff --git a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-list.vue b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-list.vue index 7b34f7e..555c6ac 100644 --- a/2wr-app/src/components/prepare/emergency-kits/emergency-kit-list.vue +++ b/2wr-app/src/components/prepare/emergency-kits/emergency-kit-list.vue @@ -2,62 +2,69 @@ mdi-arrow-left - mdi-medical-bag - Emergency Kit List - - - mdi-plus - - + Build a Kit + - - - - - + + mdi-plus + + Add Kit + + + + + + + + + + + + + No Kits Defined + + + + + diff --git a/2wr-app/src/views/prepare/emergency-kits/emergency-kit-create.vue b/2wr-app/src/views/prepare/emergency-kits/emergency-kit-create.vue deleted file mode 100644 index 91129a8..0000000 --- a/2wr-app/src/views/prepare/emergency-kits/emergency-kit-create.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/2wr-app/src/views/prepare/emergency-kits/emergency-kit-details.vue b/2wr-app/src/views/prepare/emergency-kits/emergency-kit-details.vue new file mode 100644 index 0000000..05b278f --- /dev/null +++ b/2wr-app/src/views/prepare/emergency-kits/emergency-kit-details.vue @@ -0,0 +1,14 @@ + + + diff --git a/2wr-app/src/views/prepare/emergency-kits/emergency-kit-edit.vue b/2wr-app/src/views/prepare/emergency-kits/emergency-kit-edit.vue deleted file mode 100644 index 349b213..0000000 --- a/2wr-app/src/views/prepare/emergency-kits/emergency-kit-edit.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/TwoWeeksReady.Common/EmergencyKits/BaseKit.cs b/TwoWeeksReady.Common/EmergencyKits/BaseKit.cs index 3e735b9..075a712 100644 --- a/TwoWeeksReady.Common/EmergencyKits/BaseKit.cs +++ b/TwoWeeksReady.Common/EmergencyKits/BaseKit.cs @@ -11,8 +11,11 @@ public class BaseKit [JsonProperty(PropertyName = "name")] public string Name { get; set; } - [JsonProperty(PropertyName = "icon")] - public string Icon { get; set; } // material icon + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + [JsonProperty(PropertyName = "iconUrl")] + public string IconUrl { get; set; } [JsonProperty(PropertyName = "items")] public List Items { get; set; } = new List(); diff --git a/TwoWeeksReady.Common/EmergencyKits/BaseKitItem.cs b/TwoWeeksReady.Common/EmergencyKits/BaseKitItem.cs index 9b5e208..005f7aa 100644 --- a/TwoWeeksReady.Common/EmergencyKits/BaseKitItem.cs +++ b/TwoWeeksReady.Common/EmergencyKits/BaseKitItem.cs @@ -13,11 +13,14 @@ public class BaseKitItem [JsonProperty(PropertyName = "description")] public string Description { get; set; } - [JsonProperty(PropertyName = "photo")] - public string Photo { get; set; } // URL or byte[] ? + [JsonProperty(PropertyName = "quantityPerAdult")] + public int QuantityPerAdult { get; set; } //per adult + + [JsonProperty(PropertyName = "quantityPerChild")] + public int QuantityPerChild { get; set; } //per child - [JsonProperty(PropertyName = "quantityPerCount")] - public int QuantityPerCount { get; set; } //per person or pet, 14 days + [JsonProperty(PropertyName = "quantityPerPet")] + public int QuantityPerPet { get; set; } //per pet [JsonProperty(PropertyName = "quantityUnit")] public string QuantityUnit { get; set; } //measurement unit, 14 days diff --git a/TwoWeeksReady.Common/EmergencyKits/Kit.cs b/TwoWeeksReady.Common/EmergencyKits/Kit.cs index 65a0bfb..7560bd1 100644 --- a/TwoWeeksReady.Common/EmergencyKits/Kit.cs +++ b/TwoWeeksReady.Common/EmergencyKits/Kit.cs @@ -8,18 +8,15 @@ public class Kit [JsonProperty(PropertyName = "id")] public string Id { get; set; } + [JsonProperty(PropertyName = "baseKitId")] + public string BaseKitId { get; set; } + [JsonProperty(PropertyName = "userId")] public string UserId { get; set; } [JsonProperty(PropertyName = "name")] public string Name { get; set; } - [JsonProperty(PropertyName = "color")] - public string Color { get; set; } //hex color - - [JsonProperty(PropertyName = "icon")] - public string Icon { get; set; } //material design icon - [JsonProperty(PropertyName = "kitItems")] public List Items { get; set; } = new List(); } diff --git a/TwoWeeksReady.Common/EmergencyKits/KitItem.cs b/TwoWeeksReady.Common/EmergencyKits/KitItem.cs index 9407783..dc44885 100644 --- a/TwoWeeksReady.Common/EmergencyKits/KitItem.cs +++ b/TwoWeeksReady.Common/EmergencyKits/KitItem.cs @@ -7,6 +7,9 @@ public class KitItem [JsonProperty(PropertyName = "id")] public string Id { get; set; } + [JsonProperty(PropertyName = "baseKitItemId")] + public string BaseKitItemId { get; set; } + [JsonProperty(PropertyName = "userId")] public string UserId { get; set; } diff --git a/admin/TwoWeeksReady.Admin/Components/KitItemDisplay.razor b/admin/TwoWeeksReady.Admin/Components/KitItemDisplay.razor index c4a9bd1..669b6c7 100644 --- a/admin/TwoWeeksReady.Admin/Components/KitItemDisplay.razor +++ b/admin/TwoWeeksReady.Admin/Components/KitItemDisplay.razor @@ -1,62 +1,55 @@ @inject IRepository repository
- @Item.Name - - @if (IsEditMode) - { -
- Name:
- Description:
- Quantity Per Person:
- Quantity Unit (lbs, oz):
-
- - } - else - { -
-
@Item.Name
- @Item.Description -
- - } - +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
@code { - - public bool IsEditMode { get; set; } = false; - [Parameter] public BaseKitItem Item { get; set; } - - [Parameter] - public EventCallback OnEdit { get; set; } - - [Parameter] - public EventCallback OnSave { get; set; } - - public async Task Edit() - { - - IsEditMode = true; - await OnEdit.InvokeAsync(Item); - } - - - public async Task Save() - { - IsEditMode = false; - @* await repository.SaveBaseKitItem(Item); *@ - await OnSave.InvokeAsync(Item); - - } } diff --git a/admin/TwoWeeksReady.Admin/Data/FunctionsRepository.cs b/admin/TwoWeeksReady.Admin/Data/FunctionsRepository.cs index e62d423..b35c0f9 100644 --- a/admin/TwoWeeksReady.Admin/Data/FunctionsRepository.cs +++ b/admin/TwoWeeksReady.Admin/Data/FunctionsRepository.cs @@ -53,7 +53,7 @@ public async Task GetHazardInfoById(string id) public async Task SaveBaseKit(BaseKit kit) { - var response = await _httpClient.PutAsJsonAsync("basekits-update", kit); + var response = await _httpClient.PutAsJsonAsync("basekit-update", kit); if (response.IsSuccessStatusCode) { return await response.Content.ReadFromJsonAsync(); diff --git a/admin/TwoWeeksReady.Admin/Data/StubRepository.cs b/admin/TwoWeeksReady.Admin/Data/StubRepository.cs index 631af41..e600d6d 100644 --- a/admin/TwoWeeksReady.Admin/Data/StubRepository.cs +++ b/admin/TwoWeeksReady.Admin/Data/StubRepository.cs @@ -14,23 +14,21 @@ public class StubRepository : IRepository new BaseKit { Id="1234", Name="Emergency Kit", - Icon="mdi-medical-bag", + IconUrl="", Items = new List { new BaseKitItem { Id="1", Name="Flashlight", Description="You need a flashlight if the power is out", - Photo="", QuantityUnit="Flashlights", - QuantityPerCount=1 + QuantityPerAdult=1 }, new BaseKitItem { Id="2", Name="Cans Of Soup", Description="You need to eat - nonperishable soup is easy to prepare", - Photo="", QuantityUnit="Cans", - QuantityPerCount=14 + QuantityPerAdult=14 }, } } diff --git a/admin/TwoWeeksReady.Admin/Pages/Kits/Details.razor b/admin/TwoWeeksReady.Admin/Pages/Kits/Details.razor index c1c7975..910713a 100644 --- a/admin/TwoWeeksReady.Admin/Pages/Kits/Details.razor +++ b/admin/TwoWeeksReady.Admin/Pages/Kits/Details.razor @@ -1,41 +1,100 @@ @page "/Kits/{id}" +@page "/Kits/new" @attribute [Authorize(Roles = "admin")] @inject IRepository repository +@inject IJSRuntime JS +@inject ClientImageService clientImages @if (Kit != null) { -

Kit Details :: @Kit.Name

+

Kit Details :: @Kit.Name

-
- - @foreach (var item in Kit.Items) { - - } +
+ +
+ + +
+
+ + +
+
+ -
+ + @foreach (var image in clientImages.Images) + { + + } + + +
+ +
+ +
+ + @foreach (var item in Kit.Items) + { + + } + +
+ + } else { -

Loading...

+

Loading...

} @code { - [Parameter] - public string Id { get; set; } - - public BaseKit Kit { get; set; } + [Parameter] + public string Id { get; set; } - protected override async Task OnInitializedAsync() - { + public BaseKit Kit { get; set; } - Kit = await repository.GetBaseKitById(Id); + public void AddKitItem() + { + if (Kit != null && Kit.Items != null) + { + Kit.Items.Add(new BaseKitItem { Id = Guid.NewGuid().ToString() }); + } + } - await base.OnInitializedAsync(); + public async Task SaveBaseKit() + { + if (Kit != null) + { + if (string.IsNullOrEmpty(Kit.Id)) + { + Kit = await repository.CreateBaseKit(Kit); + } + else + { + Kit = await repository.SaveBaseKit(Kit); + } - } + await JS.InvokeVoidAsync("alert", new object[] { "Base Kit Saved" }); + } + } + protected override async Task OnInitializedAsync() + { + if (string.IsNullOrEmpty(Id)) + { + Kit = new BaseKit(); + } + else + { + Kit = await repository.GetBaseKitById(Id); + } + await base.OnInitializedAsync(); + } } diff --git a/admin/TwoWeeksReady.Admin/Pages/Kits/List.razor b/admin/TwoWeeksReady.Admin/Pages/Kits/List.razor index 7e42741..e407342 100644 --- a/admin/TwoWeeksReady.Admin/Pages/Kits/List.razor +++ b/admin/TwoWeeksReady.Admin/Pages/Kits/List.razor @@ -1,15 +1,14 @@ @page "/Kits/" @attribute [Authorize (Roles = "admin")] @inject IRepository Repository +@inject ClientImageService clientImages -

Administer the Base Kits for Two Weeks Ready

- -

Current Basekits Defined:

+

Administer Base Kits

@if (BaseKits != null && BaseKits.Any()) { - +
@@ -19,12 +18,10 @@ @foreach (var kit in BaseKits) { - @@ -33,11 +30,16 @@
Name
- @kit.Name + @kit.Name @kit.Items.Count()
- + Add New Kit +} +else if (BaseKits == null) +{ +

Loading....

} else {

No base kits defined.

+ Add New Kit } @code { diff --git a/api/TwoWeeksReady/EmergencyKits/BaseKitsApi.cs b/api/TwoWeeksReady/EmergencyKits/BaseKitsApi.cs index a5a1156..cca6c09 100644 --- a/api/TwoWeeksReady/EmergencyKits/BaseKitsApi.cs +++ b/api/TwoWeeksReady/EmergencyKits/BaseKitsApi.cs @@ -81,8 +81,12 @@ public async Task GetKit( log.LogInformation($"Getting single base kit"); Uri collectionUri = UriFactory.CreateDocumentCollectionUri("2wr", "basekits"); - var baseKit = client.CreateDocumentQuery(collectionUri, new FeedOptions { EnableCrossPartitionQuery = true }) - .Where(b => b.Id == id).FirstOrDefault(); + + var feedOptions = new FeedOptions { EnableCrossPartitionQuery = false }; + var baseKit = client.CreateDocumentQuery(collectionUri, feedOptions) + .Where(d => d.Id == id) + .AsEnumerable() + .FirstOrDefault(); if (baseKit == null) { diff --git a/api/TwoWeeksReady/EmergencyKits/EmergencyKitsApi.cs b/api/TwoWeeksReady/EmergencyKits/EmergencyKitsApi.cs index c6232d6..d797298 100644 --- a/api/TwoWeeksReady/EmergencyKits/EmergencyKitsApi.cs +++ b/api/TwoWeeksReady/EmergencyKits/EmergencyKitsApi.cs @@ -28,8 +28,9 @@ public EmergencyKitsApi(IApiAuthentication apiAuthentication) [FunctionName("emergencykits")] public async Task GetKits( - [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] + [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "emergencykits/{baseKitId?}")] HttpRequest req, + string baseKitId, [CosmosDB( databaseName: "2wr", collectionName: "emergencykits", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client, ILogger log) @@ -44,14 +45,21 @@ public async Task GetKits( log.LogInformation($"Getting list of emergency kits"); Uri collectionUri = UriFactory.CreateDocumentCollectionUri("2wr", "emergencykits"); - var query = client.CreateDocumentQuery(collectionUri, new FeedOptions{EnableCrossPartitionQuery = false}) - .Where(e => e.UserId == authorizationResult.User.Identity.Name) - .AsDocumentQuery(); + + var kitQuery = client.CreateDocumentQuery(collectionUri, new FeedOptions { EnableCrossPartitionQuery = false }) + .Where(e => e.UserId == authorizationResult.User.Identity.Name); + + if (!string.IsNullOrEmpty(baseKitId)) + { + kitQuery = kitQuery.Where(e => e.BaseKitId == baseKitId); + } + + var documentQuery = kitQuery.AsDocumentQuery(); var emergencyKits = new List(); - while (query.HasMoreResults) + while (documentQuery.HasMoreResults) { - var result = await query.ExecuteNextAsync(); + var result = await documentQuery.ExecuteNextAsync(); emergencyKits.AddRange(result); } @@ -175,8 +183,7 @@ public async Task CreateFromBaseKit( UserId = authorizationResult.User.Identity.Name, Name = bki.Name, Description = bki.Description, - Photo = bki.Photo, - Quantity = bki.QuantityPerCount * request.Count, + Quantity = bki.QuantityPerAdult * request.Count, QuantityUnit = bki.QuantityUnit, IsAvailableInKit = false })); diff --git a/solution architecture.xml b/solution architecture.xml new file mode 100644 index 0000000..a8c52d4 --- /dev/null +++ b/solution architecture.xml @@ -0,0 +1 @@ +7VrbcuI4EP0aqnYf4vId/Agh7FwyVdSmajKzLykFK7YmsuWV5QD5+m3ZEvhGYBKcnYdJKmC1hC6nu093i4ycy2TzF0dZ/IWFmI5sM9yMnPnIti3XcuFNSraVZDxRgoiTUA3aC27IM1ZCU0kLEuK8MVAwRgXJmsIVS1O8Eg0Z4pytm8MeGG2umqEIdwQ3K0S70lsSilhJLdPcd3zAJIrV0hNPdSRID1aCPEYhW9dEztXIueSMieop2VxiKsHTuFSfWxzo3W2M41Sc8oFv11/IPzeZa339YX7/bH16yK7GF+NqlidEC3VgtVmx1QhEnBWZGoa5wJs+3NG9Hm5292XtTgtmglmCBd/CEDXRREOpLMTTCK73eNtaFtegth0lRErH0W7uPQzwoJD4CVTc46isYyLwTYZWsr0G2x85s1gksMzcgkeUZ5U1PpANhqVmBwGsA3VYRV306ujYfejYQ6FjHUenc/waNBkjqSj35M1G3lyCRUmUgmAFQGAOApKUXjl7YKlQlGDZe/mcJBHsnJJ7eEXPBcfyRCECK0Q5kIW9mErh3SXLE5bfzWdG/hQNoQM1i980YKtrv0GPgoKh9OP36MensOqsoA01+f8WknxKmC/yEucpDLCCbLPvhKdIvZdzUPL6OT4g/ox4mOu57vnb91Mawjk3Cb6LofMzEflgayxQQqi0oCVF6XDLXCWYRzhdbU85DwilfWhhy6PBZaQ8F5w94ktGGfjpPGVp6aaE0pao5u99TCl9kECQnSrPT0gYypVmDHoeaBkmY5DhtMUCwRBurFOTE+OO5Q/GrOYvEI6dJpvteKoGizV+V1iCDirT5cc3R+TzmZVl9iNaR8x/V8Qmv2aIXrEkKwSw62JRpCtBWHo3zbL8zeH5kALUNJ7VsOjAcC1r7Ltj05tMbMdzOvbtu11leb6x+4QdwAz+UCRgdXSFQ6hJVJNxEbOIpYhe7aUzIIU0lGqcm5JFd2OuGcuUUn9gIbZKVagQrKnytjccZOhcIC6msrKS5kBRnpOVFi8I1fNVZ5AbP6hKfU5W8BU+no3DAhF+yQqCfiPgmCJBnpr7OL/W7OMupzG9RveYLllOpAdA1z0TgiU9oAvWIrFdDSm1HKI83qm8Csy6RFVjM7lwsolkaW6gNOSMhEYWQ4i2O7F8ZDsrU/6+lhpfDiteM6r0BRWrr4pxB4u1Xkdh9u3fIJgul5AFoURCn97nWS1FkvlqlR99LWSO+OkGXv5Y3k7/PJQv1XV3YurUodqDrtgX8ZpEMIAiW+mB4/dosrdaH0yRffVOm0DT8ABldcUvkCJAxLffFLZl47tsGLan2/NNvXe+Va0zsqEmmtfSYU1PfWrSspNZU62wlClDzd0nTTNxzZb6q3OqT9VvrVoT+W1781oTVTh0JipNaXfsN1hX94ZsGiYklUSRZdL9ZxQ9M95lAFYISlJweH0xKQ0BqDgkoPM2DbC9CIjYc70Z5CAncAYMnowDK/Db8eCVsaZDPi94Q9lW5zX7MuxOBFrnrgGbL+BYqMz+Qpw/VguXKSfmV0+4yjz1JdNbqMpu2WDPxaIVjI1J1wusyWBsdUJqfm62ujAN02oylufaRyirbC0xJ3BuaQln57Hxbx57Tx7rFtEfQ1AaERLMLyiFsi3Bau26MWon1gXfUWKhsmOGVo9RmYvUmOqh/DnMPW3+KJecaqlZqy5jIeT3P1MJk70oMspQaKzJIxhrSJDBuCw+ZTuT7aryTJi8aVuIuEhkUerJP/lwDZUSENHdtBCxWZai9gKqPTPbXHS6jCw9uVJ9mZvGnm04k2M5se2ODd/uWvdg9KQp8x3o6exc8n9xhG3tYkg70vwsS4xbZVLnhmhglrBP+G7nXNFpQ0SZShvBxFNtlU07rmrvQ5NsbGuNIQPTqQm29WtFpvb3Sa+NTG675B7a5k64OTm7zTUs7mVr01lUI4PaNYYv+ILf5ngec4Tm/r8tquH7/1lxrv4D \ No newline at end of file