private async Task OnSave(object obj) { if (obj != null) { CreateOrderModel model = (CreateOrderModel)obj; if (string.IsNullOrEmpty(model.CustomerName)) { return; } await Task.Run(() => { IsBusy = true; IsEnabled = false; IDbManager dbManager = ObjectPool.Instance.Resolve <IDbManager>(); IDataCommand db = dbManager.GetDatabase(ApplicationSettings.Instance.Database.DefaultConnection.Name); Dictionary <string, string> scripts = new Dictionary <string, string>(); List <int> result = db.Query <int>("CheckExistsOrder", new { OrderId = model.PoNumber }); if (result.Any()) { scripts.Add("Order", "UpdateOrder"); scripts.Add("OrderDetail", "UpdateOrderDetail"); } else { scripts.Add("Order", "CreateOrder"); scripts.Add("OrderDetail", "CreateOrderDetail"); } IDbTransaction transaction = ((BaseDbCommand)db).BeginTransaction(); try { db.Execute(scripts["Order"], new { OrderId = model.PoNumber, CustomerName = model.CustomerName, CustomerPhone = model.CustomerPhone, Status = "I", Total = model.TotalPayment, Installment = model.Installment, Remaining = model.Remaining, Disc = model.discount }); CreateOrderDetailModel detail; for (int i = 0; i < model.Details.Source.Count; i++) { detail = model.Details.Source[i]; result = db.Query <int>("CheckExistsOrderDetail", new { OrderId = model.poNumber, SeqNbr = detail.SeqNbr }); if (!result.Any()) { scripts["OrderDetail"] = "CreateOrderDetail"; } db.Execute(scripts["OrderDetail"], new { OrderId = model.PoNumber, SeqNbr = i + 1, MaterialTypeId = detail.MaterialId, QualityId = detail.QualityId, FinishingId = detail.FinishingId, Title = detail.Title, Width = detail.Width, Height = detail.Height, Qty = detail.Qty, Filename = detail.Filename, Image = detail.Stream, Queue = 0, Deadline = detail.Deadline, Description = detail.Description, Total = detail.Price }); } transaction.Commit(); } catch (Exception x) { transaction.Rollback(); } db.Close(); IsBusy = false; IsEnabled = true; OnItemCreated(); }); } }
private void OnCreateOrder() { CreateOrderModel order = new CreateOrderModel(); IDialogService dialog = ObjectPool.Instance.Resolve<IDialogService>(); order.ItemCreated += order_ItemCreated; dialog.ShowDialog<CreateOrder>(order); }