This commit is contained in:
Inohara 2023-04-25 08:54:06 +04:00
parent 2c2eec51ff
commit 91fdd361b6
11 changed files with 212 additions and 185 deletions

View File

@ -110,13 +110,27 @@ namespace IceCreamBusinessLogic.BusinessLogics
{ {
throw new ArgumentNullException(nameof(model)); throw new ArgumentNullException(nameof(model));
} }
if ((int)vmodel.Status + 1 != (int)orderStatus) if ((int)vmodel.Status + 1 != (int)orderStatus && !(vmodel.Status == OrderStatus.Ожидается && orderStatus == OrderStatus.Готов))
{ {
throw new InvalidOperationException($"Попытка перевести заказ не в следующий статус: " + throw new InvalidOperationException($"Попытка перевести заказ не в следующий статус: " +
$"Текущий статус: {vmodel.Status} \n" + $"Текущий статус: {vmodel.Status} \n" +
$"Планируемый статус: {orderStatus} \n" + $"Планируемый статус: {orderStatus} \n" +
$"Доступный статус: {(OrderStatus)((int)vmodel.Status + 1)}"); $"Доступный статус: {(OrderStatus)((int)vmodel.Status + 1)}");
} }
if (orderStatus == OrderStatus.Готов || orderStatus == OrderStatus.Ожидается)
{
var icecream = _iceCreamStorage.GetElement(new() { Id = vmodel.IceCreamId });
if (icecream == null || !_shopLogic.AddIceCream(icecream, vmodel.Count))
{
_logger.LogWarning($"Не удалось заполнить магазины изделием '{icecream?.IceCreamName ?? string.Empty}' из заказа {vmodel.Id}");
orderStatus = OrderStatus.Ожидается;
}
else
{
orderStatus = OrderStatus.Готов;
}
}
model.Status = orderStatus; model.Status = orderStatus;
model.DateCreate = vmodel.DateCreate; model.DateCreate = vmodel.DateCreate;
if (model.DateImplement == null) if (model.DateImplement == null)
@ -134,7 +148,6 @@ namespace IceCreamBusinessLogic.BusinessLogics
return true; return true;
} }
public OrderViewModel? ReadElement(OrderSearchModel model) public OrderViewModel? ReadElement(OrderSearchModel model)
{ {
if (model == null) if (model == null)

View File

@ -76,7 +76,44 @@ namespace IceCreamBusinessLogic.BusinessLogics
throw new ArgumentNullException("Count of iceCreams in supply myst be more than 0", nameof(count)); throw new ArgumentNullException("Count of iceCreams in supply myst be more than 0", nameof(count));
} }
var shopElement = _shopStorage.GetElement(model); _logger.LogInformation("AddPastryInShop. ShopName:{ShopName}.Id:{ Id}", model.Name, model.Id);
var element = _shopStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("AddPastryInShop element not found");
return false;
}
_logger.LogInformation("AddPastryInShop find. Id:{Id}", element.Id);
if (element.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream))
{
element.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count);
_logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name);
}
else
{
element.ShopIceCreams[iceCream.Id] = (iceCream, count);
_logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name);
}
/* var prevCount = element.ShopIceCreams.GetValueOrDefault(iceCream.Id, (iceCream, 0)).Item2;
element.ShopIceCreams[iceCream.Id] = (iceCream, prevCount + count);
_logger.LogInformation(
"AddPastryInShop. Has been added {count} {pastry} in {ShopName}",
count, iceCream.IceCreamName, element.Name);
*/
_shopStorage.Update(new()
{
Id = element.Id,
Adress = element.Adress,
Name = element.Name,
OpeningDate = element.OpeningDate,
ShopIceCreams = element.ShopIceCreams
});
return true;
/* var shopElement = _shopStorage.GetElement(model);
if (shopElement == null) if (shopElement == null)
{ {
_logger.LogWarning("Required shop element not found in storage"); _logger.LogWarning("Required shop element not found in storage");
@ -84,16 +121,16 @@ namespace IceCreamBusinessLogic.BusinessLogics
} }
_logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name); _logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name);
var countDocs = 0; var countIcecreams = 0;
foreach (var doc in shopElement.ShopIceCreams) foreach (var icecream in shopElement.ShopIceCreams)
{ {
countDocs += doc.Value.Item2; countIcecreams += icecream.Value.Item2;
} }
if (shopElement.IceCreamMaxCount - countDocs >= count) if (shopElement.IceCreamMaxCount - countIcecreams >= count)
{ {
if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameDocument)) if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream))
{ {
shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameDocument.Item2 + count); shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count);
_logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name);
} }
else else
@ -116,8 +153,55 @@ namespace IceCreamBusinessLogic.BusinessLogics
_logger.LogWarning("Required shop is overflowed"); _logger.LogWarning("Required shop is overflowed");
return false; return false;
} }
return true;*/
}
public bool AddIceCream(IIceCreamModel icecream, int count)
{
if (count <= 0)
{
_logger.LogWarning("AddPastriesInShops. Количество добавляемых изделий должно быть больше 0. Количество - {count}", count);
return false;
}
var freePlaces = GetFreePlaces(count);
if (freePlaces < 0)
{
_logger.LogInformation("AddPastriesInShops. Не удалось добавить изделия в магазины, поскольку они переполнены." +
"Освободите магазины на {places} изделий", -freePlaces);
return false;
}
foreach (var shop in _shopStorage.GetFullList())
{
/* int freeInShop = shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum();
if (freeInShop < count) continue;*/
var cnt = Math.Min(count, shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum());
if (cnt <= 0)
{
continue;
}
if (!SupplyIceCreams(new() { Id = shop.Id }, icecream, cnt))
{
_logger.LogWarning("При добавления изделий во все магазины произошла ошибка");
return false;
}
count -= cnt;
if (count == 0)
{
return true; return true;
} }
}
return true;
}
//свободные места со всех магазинов
public int GetFreePlaces(int countIceCreams)
{
// Сумма разностей между максимальный кол-вом изделий и суммой всех изделий в магазине
return _shopStorage.GetFullList()
.Select(x => x.IceCreamMaxCount - x.ShopIceCreams.Select(p => p.Value.Item2).Sum())
.Sum() - countIceCreams;
}
public bool SellIceCreams(IIceCreamModel iceCream, int count) public bool SellIceCreams(IIceCreamModel iceCream, int count)
{ {

View File

@ -32,7 +32,7 @@ namespace IceCreamBusinessLogic.BusinessLogic
} }
// Поскольку у нас могут быть заказы в работе мы не дожны заканчивать работы, если нет Принятых заказов // Поскольку у нас могут быть заказы в работе мы не дожны заканчивать работы, если нет Принятых заказов
// Поэтому находим заказы в работе и продолжаем работу, если они есть // Поэтому находим заказы в работе и продолжаем работу, если они есть
var orders = _orderLogic.ReadList(new OrderSearchModel { Statusses = new() { OrderStatus.Принят, OrderStatus.Выполняется } }); var orders = _orderLogic.ReadList(new OrderSearchModel { Statusses = new() { OrderStatus.Принят, OrderStatus.Выполняется, OrderStatus.Ожидается } });
if (orders == null || orders.Count == 0) if (orders == null || orders.Count == 0)
{ {
_logger.LogWarning("DoWork. Orders is null or empty"); _logger.LogWarning("DoWork. Orders is null or empty");
@ -56,6 +56,35 @@ namespace IceCreamBusinessLogic.BusinessLogic
{ {
return; return;
} }
// Для заказов находящихся в статусе ожидания работник не должен делать никакую работу, а должен просто пытаться перевести их в статус готов
await Task.Run(() =>
{
foreach (var order in orders.Where(x => x.Status == OrderStatus.Ожидается && x.ImplementerId == implementer.Id))
{
try
{
_orderLogic.DeliveryOrder(new OrderBindingModel
{
Id = order.Id
});
}
// кто-то мог уже перехватить
catch (InvalidOperationException ex)
{
_logger.LogWarning(ex, "Error try get work");
}
// заканчиваем выполнение имитации в случае иной ошибки
catch (Exception ex)
{
_logger.LogError(ex, "Error while do work");
throw;
}
// отдыхаем
Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
}
});
await RunOrderInWork(implementer, orders); await RunOrderInWork(implementer, orders);
await Task.Run(() => await Task.Run(() =>

View File

@ -34,7 +34,6 @@
this.dataGridView = new System.Windows.Forms.DataGridView(); this.dataGridView = new System.Windows.Forms.DataGridView();
this.menuStrip = new System.Windows.Forms.MenuStrip(); this.menuStrip = new System.Windows.Forms.MenuStrip();
this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -44,10 +43,10 @@
this.iceCreamComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.iceCreamComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.iceCreamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.iceCreamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.DoWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.listShopsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.listShopsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.shopWorkloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.shopWorkloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ordersByDateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ordersByDateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.DoWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.buttonSupplyShop = new System.Windows.Forms.Button(); this.buttonSupplyShop = new System.Windows.Forms.Button();
this.SellIceCreamButton = new System.Windows.Forms.Button(); this.SellIceCreamButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
@ -56,8 +55,7 @@
// //
// buttonUpdate // buttonUpdate
// //
this.buttonUpdate.Location = new System.Drawing.Point(1235, 149); this.buttonUpdate.Location = new System.Drawing.Point(1231, 392);
this.buttonUpdate.Location = new System.Drawing.Point(1053, 390);
this.buttonUpdate.Name = "buttonUpdate"; this.buttonUpdate.Name = "buttonUpdate";
this.buttonUpdate.Size = new System.Drawing.Size(194, 49); this.buttonUpdate.Size = new System.Drawing.Size(194, 49);
this.buttonUpdate.TabIndex = 13; this.buttonUpdate.TabIndex = 13;
@ -67,8 +65,7 @@
// //
// buttonSetToFinish // buttonSetToFinish
// //
this.buttonSetToFinish.Location = new System.Drawing.Point(1235, 94); this.buttonSetToFinish.Location = new System.Drawing.Point(1231, 90);
this.buttonSetToFinish.Location = new System.Drawing.Point(1053, 193);
this.buttonSetToFinish.Name = "buttonSetToFinish"; this.buttonSetToFinish.Name = "buttonSetToFinish";
this.buttonSetToFinish.Size = new System.Drawing.Size(194, 49); this.buttonSetToFinish.Size = new System.Drawing.Size(194, 49);
this.buttonSetToFinish.TabIndex = 12; this.buttonSetToFinish.TabIndex = 12;
@ -76,30 +73,9 @@
this.buttonSetToFinish.UseVisualStyleBackColor = true; this.buttonSetToFinish.UseVisualStyleBackColor = true;
this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click); this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click);
// //
// buttonSetToDone
//
this.buttonSetToDone.Location = new System.Drawing.Point(1053, 139);
this.buttonSetToDone.Name = "buttonSetToDone";
this.buttonSetToDone.Size = new System.Drawing.Size(194, 49);
this.buttonSetToDone.TabIndex = 11;
this.buttonSetToDone.Text = "Заказ готов";
this.buttonSetToDone.UseVisualStyleBackColor = true;
this.buttonSetToDone.Click += new System.EventHandler(this.buttonSetToDone_Click);
//
// buttonSetToWork
//
this.buttonSetToWork.Location = new System.Drawing.Point(1053, 87);
this.buttonSetToWork.Name = "buttonSetToWork";
this.buttonSetToWork.Size = new System.Drawing.Size(194, 49);
this.buttonSetToWork.TabIndex = 10;
this.buttonSetToWork.Text = "Отдать на выполнение";
this.buttonSetToWork.UseVisualStyleBackColor = true;
this.buttonSetToWork.Click += new System.EventHandler(this.buttonSetToWork_Click);
//
// buttonCreateOrder // buttonCreateOrder
// //
this.buttonCreateOrder.Location = new System.Drawing.Point(1235, 39); this.buttonCreateOrder.Location = new System.Drawing.Point(1231, 35);
this.buttonCreateOrder.Location = new System.Drawing.Point(1053, 33);
this.buttonCreateOrder.Name = "buttonCreateOrder"; this.buttonCreateOrder.Name = "buttonCreateOrder";
this.buttonCreateOrder.Size = new System.Drawing.Size(194, 49); this.buttonCreateOrder.Size = new System.Drawing.Size(194, 49);
this.buttonCreateOrder.TabIndex = 9; this.buttonCreateOrder.TabIndex = 9;
@ -114,8 +90,7 @@
this.dataGridView.Name = "dataGridView"; this.dataGridView.Name = "dataGridView";
this.dataGridView.RowHeadersWidth = 51; this.dataGridView.RowHeadersWidth = 51;
this.dataGridView.RowTemplate.Height = 29; this.dataGridView.RowTemplate.Height = 29;
this.dataGridView.Size = new System.Drawing.Size(1215, 407); this.dataGridView.Size = new System.Drawing.Size(1202, 407);
this.dataGridView.Size = new System.Drawing.Size(1033, 407);
this.dataGridView.TabIndex = 8; this.dataGridView.TabIndex = 8;
// //
// menuStrip // menuStrip
@ -128,31 +103,22 @@
this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.Name = "menuStrip"; this.menuStrip.Name = "menuStrip";
this.menuStrip.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3); this.menuStrip.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3);
this.menuStrip.Size = new System.Drawing.Size(1441, 30); this.menuStrip.Size = new System.Drawing.Size(1433, 30);
this.menuStrip.Size = new System.Drawing.Size(1259, 30);
this.menuStrip.TabIndex = 7; this.menuStrip.TabIndex = 7;
this.menuStrip.Text = "Справочники"; this.menuStrip.Text = "Справочники";
// //
// справочникиToolStripMenuItem // справочникиToolStripMenuItem
// //
this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.клиентыToolStripMenuItem,
this.компонентыToolStripMenuItem, this.компонентыToolStripMenuItem,
this.мороженоеToolStripMenuItem, this.мороженоеToolStripMenuItem,
this.клиентыToolStripMenuItem, this.клиентыToolStripMenuItem,
this.ImplementersToolStripMenuItem}); this.ImplementersToolStripMenuItem,
this.магазиныToolStripMenuItem}); this.магазиныToolStripMenuItem});
this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(117, 24); this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(117, 24);
this.справочникиToolStripMenuItem.Text = "Справочники"; this.справочникиToolStripMenuItem.Text = "Справочники";
// //
// клиентыToolStripMenuItem
//
this.клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem";
this.клиентыToolStripMenuItem.Size = new System.Drawing.Size(224, 26);
this.клиентыToolStripMenuItem.Text = "Клиенты";
this.клиентыToolStripMenuItem.Click += new System.EventHandler(this.клиентыToolStripMenuItem_Click);
//
// компонентыToolStripMenuItem // компонентыToolStripMenuItem
// //
this.компонентыToolStripMenuItem.Name = омпонентыToolStripMenuItem"; this.компонентыToolStripMenuItem.Name = омпонентыToolStripMenuItem";
@ -184,7 +150,7 @@
// магазиныToolStripMenuItem // магазиныToolStripMenuItem
// //
this.магазиныToolStripMenuItem.Name = агазиныToolStripMenuItem"; this.магазиныToolStripMenuItem.Name = агазиныToolStripMenuItem";
this.магазиныToolStripMenuItem.Size = new System.Drawing.Size(224, 26); this.магазиныToolStripMenuItem.Size = new System.Drawing.Size(185, 26);
this.магазиныToolStripMenuItem.Text = "Магазины"; this.магазиныToolStripMenuItem.Text = "Магазины";
this.магазиныToolStripMenuItem.Click += new System.EventHandler(this.магазиныToolStripMenuItem_Click); this.магазиныToolStripMenuItem.Click += new System.EventHandler(this.магазиныToolStripMenuItem_Click);
// //
@ -222,7 +188,6 @@
this.ordersToolStripMenuItem.Text = "Список заказов"; this.ordersToolStripMenuItem.Text = "Список заказов";
this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click); this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click);
// //
// DoWorkToolStripMenuItem
// listShopsToolStripMenuItem // listShopsToolStripMenuItem
// //
this.listShopsToolStripMenuItem.Name = "listShopsToolStripMenuItem"; this.listShopsToolStripMenuItem.Name = "listShopsToolStripMenuItem";
@ -244,9 +209,16 @@
this.ordersByDateToolStripMenuItem.Text = "Заказы по дате"; this.ordersByDateToolStripMenuItem.Text = "Заказы по дате";
this.ordersByDateToolStripMenuItem.Click += new System.EventHandler(this.ordersByDateToolStripMenuItem_Click); this.ordersByDateToolStripMenuItem.Click += new System.EventHandler(this.ordersByDateToolStripMenuItem_Click);
// //
// DoWorkToolStripMenuItem
//
this.DoWorkToolStripMenuItem.Name = "DoWorkToolStripMenuItem";
this.DoWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24);
this.DoWorkToolStripMenuItem.Text = "Запуск работ";
this.DoWorkToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click);
//
// buttonSupplyShop // buttonSupplyShop
// //
this.buttonSupplyShop.Location = new System.Drawing.Point(1053, 290); this.buttonSupplyShop.Location = new System.Drawing.Point(1231, 292);
this.buttonSupplyShop.Name = "buttonSupplyShop"; this.buttonSupplyShop.Name = "buttonSupplyShop";
this.buttonSupplyShop.Size = new System.Drawing.Size(194, 44); this.buttonSupplyShop.Size = new System.Drawing.Size(194, 44);
this.buttonSupplyShop.TabIndex = 14; this.buttonSupplyShop.TabIndex = 14;
@ -256,11 +228,7 @@
// //
// SellIceCreamButton // SellIceCreamButton
// //
this.DoWorkToolStripMenuItem.Name = "DoWorkToolStripMenuItem"; this.SellIceCreamButton.Location = new System.Drawing.Point(1231, 248);
this.DoWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24);
this.DoWorkToolStripMenuItem.Text = "Запуск работ";
this.DoWorkToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click);
this.SellIceCreamButton.Location = new System.Drawing.Point(1053, 246);
this.SellIceCreamButton.Name = "SellIceCreamButton"; this.SellIceCreamButton.Name = "SellIceCreamButton";
this.SellIceCreamButton.Size = new System.Drawing.Size(194, 40); this.SellIceCreamButton.Size = new System.Drawing.Size(194, 40);
this.SellIceCreamButton.TabIndex = 15; this.SellIceCreamButton.TabIndex = 15;
@ -272,8 +240,7 @@
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1441, 463); this.ClientSize = new System.Drawing.Size(1433, 467);
this.ClientSize = new System.Drawing.Size(1259, 467);
this.Controls.Add(this.SellIceCreamButton); this.Controls.Add(this.SellIceCreamButton);
this.Controls.Add(this.buttonSupplyShop); this.Controls.Add(this.buttonSupplyShop);
this.Controls.Add(this.buttonUpdate); this.Controls.Add(this.buttonUpdate);

View File

@ -95,59 +95,6 @@ namespace IceCreamShopView
} }
} }
private void buttonSetToWork_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id);
try
{
var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel
{
Id = id,
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка передачи заказа в работу");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
private void buttonSetToDone_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id);
try
{
var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel
{
Id = id,
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о готовности заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSetToFinish_Click(object sender, EventArgs e) private void buttonSetToFinish_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)

View File

@ -19,5 +19,7 @@ namespace IceCreamShopContracts.BusinessLogicsContracts
bool Delete(ShopBindingModel model); bool Delete(ShopBindingModel model);
bool SupplyIceCreams(ShopSearchModel model, IIceCreamModel iceCream, int count); bool SupplyIceCreams(ShopSearchModel model, IIceCreamModel iceCream, int count);
bool SellIceCreams(IIceCreamModel iceCream, int count); bool SellIceCreams(IIceCreamModel iceCream, int count);
bool AddIceCream(IIceCreamModel icecream, int count);
int GetFreePlaces(int countIceCreams);
} }
} }

View File

@ -6,6 +6,7 @@
Принят = 0, Принят = 0,
Выполняется = 1, Выполняется = 1,
Готов = 2, Готов = 2,
Выдан = 3 Выдан = 3,
Ожидается = 4
} }
} }

View File

@ -114,7 +114,7 @@ namespace IceCreamShopDatabaseImplement.Implements
} }
order.Update(model); order.Update(model);
context.SaveChanges(); context.SaveChanges();
return context.Orders.Include(x => x.IceCream).Include(x => x.Implementer).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; return order.GetViewModel;
} }
} }
} }

View File

@ -238,7 +238,7 @@ namespace IceCreamShopDatabaseImplement.Migrations
b.HasIndex("ShopId"); b.HasIndex("ShopId");
b.ToTable("IceCreams"); b.ToTable("ShopIcecreams");
}); });
modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b =>
@ -274,16 +274,15 @@ namespace IceCreamShopDatabaseImplement.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.Navigation("IceCream"); b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer")
});
modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b =>
{
b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", null)
.WithMany("Orders") .WithMany("Orders")
.HasForeignKey("IceCreamId") .HasForeignKey("ImplementerId");
.OnDelete(DeleteBehavior.Cascade)
.IsRequired(); b.Navigation("Client");
b.Navigation("IceCream");
b.Navigation("Implementer");
}); });
modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b =>
@ -301,22 +300,14 @@ namespace IceCreamShopDatabaseImplement.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer")
.WithMany("Orders")
.HasForeignKey("ImplementerId");
b.HasOne("IceCreamShopDatabaseImplement.Models.Shop", "Shop") b.HasOne("IceCreamShopDatabaseImplement.Models.Shop", "Shop")
.WithMany("IceCreams") .WithMany("IceCreams")
.HasForeignKey("ShopId") .HasForeignKey("ShopId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
b.Navigation("Client");
b.Navigation("IceCream"); b.Navigation("IceCream");
b.Navigation("Implementer");
b.Navigation("Shop"); b.Navigation("Shop");
}); });
@ -335,13 +326,13 @@ namespace IceCreamShopDatabaseImplement.Migrations
b.Navigation("Components"); b.Navigation("Components");
b.Navigation("Orders"); b.Navigation("Orders");
b.Navigation("Shops");
}); });
modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b =>
{ {
b.Navigation("Orders"); b.Navigation("Orders");
b.Navigation("Shops");
}); });
modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b =>

View File

@ -77,7 +77,7 @@ namespace IceCreamShopDatabaseImplement.Models
DateImplement = DateImplement, DateImplement = DateImplement,
Id = Id, Id = Id,
IceCreamName = context.IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty, IceCreamName = context.IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty,
ImplementerFIO = context.Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty,
ClientFIO = Client?.ClientFIO ?? string.Empty, ClientFIO = Client?.ClientFIO ?? string.Empty,
}; };
} }

View File

@ -56,7 +56,7 @@ namespace IceCreamShopDatabaseImplement.Models
IceCreamMaxCount = model.IceCreamMaxCount, IceCreamMaxCount = model.IceCreamMaxCount,
IceCreams = model.ShopIceCreams.Select(x => new ShopIcecream IceCreams = model.ShopIceCreams.Select(x => new ShopIcecream
{ {
IceCream = context.IceCreams.First(y => y.Id == x.Key)!, IceCream = context.IceCreams.FirstOrDefault(y => y.Id == x.Key)!,
Count = x.Value.Item2, Count = x.Value.Item2,
}).ToList() }).ToList()
}; };
@ -70,7 +70,6 @@ namespace IceCreamShopDatabaseImplement.Models
Name = model.Name; Name = model.Name;
Adress = model.Adress; Adress = model.Adress;
OpeningDate = model.OpeningDate; OpeningDate = model.OpeningDate;
IceCreamMaxCount = model.IceCreamMaxCount;
} }
public ShopViewModel GetViewModel => new() public ShopViewModel GetViewModel => new()
{ {
@ -84,36 +83,30 @@ namespace IceCreamShopDatabaseImplement.Models
public void UpdateIceCreams(IceCreamShopDatabase context, ShopBindingModel model) public void UpdateIceCreams(IceCreamShopDatabase context, ShopBindingModel model)
{ {
if (model.ShopIceCreams == null) return; var shopIceCreams = context.ShopIcecreams
var iceCreams = context.ShopIcecreams.Where(rec => rec.ShopId == model.Id).ToList(); .Where(rec => rec.ShopId == model.Id)
if (iceCreams != null && iceCreams.Count > 0) .ToList();
{
// удалили те, которых нет в модели // удалили те, которых нет в модели
if (shopIcecreams != null && shopIcecreams.Count > 0) if (shopIceCreams != null && shopIceCreams.Count > 0)
{ {
context.ShopIcecreams context.ShopIcecreams
.RemoveRange(shopIcecreams .RemoveRange(shopIceCreams
.Where(rec => !model.ShopIceCreams .Where(rec => !model.ShopIceCreams
.ContainsKey(rec.IceCreamId))); .ContainsKey(rec.IceCreamId)));
// обновили количество у существующих записей // обновили количество у существующих записей
foreach (var updateIceCream in iceCreams) foreach (var updateIcecream in shopIceCreams.Where(x => model.ShopIceCreams.ContainsKey(x.IceCreamId)))
{ {
updateIceCream.Count = model.ShopIceCreams[updateIceCream.IceCreamId].Item2; updateIcecream.Count = model.ShopIceCreams[updateIcecream.IceCreamId].Item2;
model.ShopIceCreams.Remove(updateIceCream.IceCreamId); model.ShopIceCreams.Remove(updateIcecream.IceCreamId);
} }
}
var shop = context.Shops.First(x => x.Id == model.Id);
shop.IceCreams.AddRange(model.ShopIceCreams.Select(x => new ShopIcecream
{
IceCream = context.IceCreams.First(y => y.Id == x.Key),
Count = x.Value.Item2,
}).Except(shopIceCreams ?? new()));
context.SaveChanges(); context.SaveChanges();
}
var shop = context.Shops.First(x => x.Id == Id);
foreach (var elem in model.ShopIceCreams)
{
context.ShopIcecreams.Add(new ShopIcecream
{
Shop = shop,
IceCream = context.IceCreams.First(x => x.Id == elem.Key),
Count = elem.Value.Item2
});
context.SaveChanges();
}
_cashedIcecreams = null; _cashedIcecreams = null;
} }
} }