private void fillLine(int row, ReceiptOrderLine line, ReceiptOrder order) { float acceptedAmount = 0; if (dgv_orderLines.Rows[row].Cells[5].Value != null) { float.TryParse(dgv_orderLines.Rows[row].Cells[5].Value.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture, out acceptedAmount); } float documentAmount = 0; if (dgv_orderLines.Rows[row].Cells[6].Value != null) { float.TryParse(dgv_orderLines.Rows[row].Cells[6].Value.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture, out documentAmount); } decimal unitPrice = 0; if (dgv_orderLines.Rows[row].Cells[7].Value != null) { decimal.TryParse(dgv_orderLines.Rows[row].Cells[7].Value.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out unitPrice); } line.PK_ReceiptOrder = order.PK_ReceiptOrder; line.AcceptedAmount = acceptedAmount; line.DocumentAmount = documentAmount; line.PK_Resource = (int)dgv_orderLines.Rows[row].Cells[1].Value; line.UnitPrice = unitPrice; }
private void saveReceiptOrder() { string successMessage = String.Empty; if (order != null) { fillOrder(order); List <ReceiptOrderLine> lines = order.getReceiptOrderLines(); // Save lines for (int i = 0; i < dgv_orderLines.Rows.Count - 1; i++) { if (dgv_orderLines.Rows[i].Cells[0].Value == null) { ReceiptOrderLine line = new ReceiptOrderLine(); fillLine(i, line, order); Program.db.ReceiptOrderLines.Add(line); Program.db.SaveChanges(); } else { int pk_line = int.Parse(dgv_orderLines.Rows[i].Cells[0].Value.ToString()); ReceiptOrderLine line = lines.Find((item) => item.PK_ReceiptOrderLine == pk_line); fillLine(i, line, order); Program.db.ReceiptOrderLines.Update(line); Program.db.SaveChanges(); } } // Delete deleted lines foreach (int id in deletedLines) { ReceiptOrderLine line = lines.Find((item) => item.PK_ReceiptOrderLine == id); Program.db.ReceiptOrderLines.Remove(line); Program.db.SaveChanges(); } Program.db.ReceiptOrders.Update(order); successMessage = "изменена."; } else { // Save new ReceiptOrder ReceiptOrder receiptOrder = new ReceiptOrder(); fillOrder(receiptOrder); Program.db.ReceiptOrders.Add(receiptOrder); Program.db.SaveChanges(); // Save lines for (int i = 0; i < dgv_orderLines.Rows.Count - 1; i++) { ReceiptOrderLine line = new ReceiptOrderLine(); fillLine(i, line, receiptOrder); Program.db.ReceiptOrderLines.Add(line); Program.db.SaveChanges(); } successMessage = "добавлена."; } Program.db.SaveChanges(); MessageBox.Show("Запись " + successMessage, "Успех!", MessageBoxButtons.OK, MessageBoxIcon.Information); }
public bool generateContracts() { try { int amountCities = cities.Length; int amountRoles = roles.Length; OrganizationDescription description = db.OrganizationDescriptions.FirstOrDefault(); if (description == null) { return(false); } List <int> PK_Providers = new List <int>(); List <int> PK_Resources = new List <int>(); foreach (var provider in db.Providers) { PK_Providers.Add(provider.PK_Provider); } foreach (var resource in db.Resources) { PK_Resources.Add(resource.PK_Resource); } int amountResources = PK_Resources.Count; int amountProviders = PK_Providers.Count; List <ContractLine> generatedContractLines = new List <ContractLine>(); DateTime conclusionDate, startDate, expiredDate; //генерация контрактов и ордеров for (int i = 0; i < CONTRACTS_COUNT; i++) { conclusionDate = randomDay(); startDate = conclusionDate.AddDays(1); expiredDate = randomDay(startDate); //генерация контракта Contract generatedContract = new Contract() { ContractNumber = "0000" + (i + 1).ToString(), ConclusionDate = conclusionDate, StartDate = startDate, ExpiredDate = expiredDate, ConclusionCity = cities[rand.Next(amountCities)], ProviderAgentName = "Оформитель_" + (i + 1).ToString(), ProviderAgentRole = roles[rand.Next(amountRoles)], CustomerAgentName = "Оформитель_" + (i + 1).ToString(), CustomerAgentRole = roles[rand.Next(amountRoles)], SupplierPenalty = Decimal.Parse((rand.Next(10) + rand.NextDouble()).ToString()), CustomerPenalty = Decimal.Parse((rand.Next(10) + rand.NextDouble()).ToString()), IsOpened = expiredDate >= DateTime.Now, PK_Provider = PK_Providers[rand.Next(amountProviders)], PK_OrganizationDescription = description.PK_OrganizationDescription, }; db.Contracts.Add(generatedContract); db.SaveChanges(); //генерация строк контракта generatedContractLines.Clear(); int pk_contract = generatedContract.PK_Contract; int amountContractLines = (rand.Next(5) + 1) * 2; for (int j = 0; j < amountContractLines; j++) { ContractLine line = new ContractLine() { PK_Contract = pk_contract, PK_Resource = PK_Resources[rand.Next(amountResources)], Amount = rand.Next(1, 100), UnitPrice = Decimal.Parse(rand.Next(1, 10000).ToString()), DeliveryDate = randomDay(startDate, expiredDate), }; db.ContractLines.Add(line); generatedContractLines.Add(line); } db.SaveChanges(); //генерация приходных ордеров int amountReceiptOrders; Warehouse warehouse = db.Warehouses.FirstOrDefault(); if (warehouse == null) { return(false); } generatedContractLines = generatedContractLines.OrderBy(b => b.DeliveryDate).ToList(); amountReceiptOrders = generatedContractLines.Count / 2; if (rand.Next(6) > 4) { //генерация с недопоставками DateTime provisionDate; for (int k = 0; k < amountReceiptOrders; k++) { if (rand.Next(2) > 0) { provisionDate = generatedContractLines[k * 2].DeliveryDate; } else { provisionDate = generatedContractLines[k * 2 + 1].DeliveryDate; } ReceiptOrder receiptOrder = new ReceiptOrder() { ReceiptOrderNumber = i.ToString() + k.ToString(), PK_Warehouse = warehouse.PK_Warehouse, PK_Provider = generatedContract.PK_Provider, PK_Contract = generatedContract.PK_Contract, DeliveryDate = provisionDate, }; db.ReceiptOrders.Add(receiptOrder); db.SaveChanges(); ReceiptOrderLine receiptLineUnderdeliveryOK = new ReceiptOrderLine() { PK_ReceiptOrder = receiptOrder.PK_ReceiptOrder, UnitPrice = Decimal.Parse(rand.Next(1, 10000).ToString()), PK_Resource = generatedContractLines[k * 2].PK_Resource, DocumentAmount = generatedContractLines[k * 2].Amount + rand.Next(10), AcceptedAmount = generatedContractLines[k * 2].Amount, }; ReceiptOrderLine receiptLineUnderdeliveryWrong = new ReceiptOrderLine() { PK_ReceiptOrder = receiptOrder.PK_ReceiptOrder, UnitPrice = Decimal.Parse(rand.Next(1, 10000).ToString()), PK_Resource = generatedContractLines[k * 2 + 1].PK_Resource, DocumentAmount = generatedContractLines[k * 2 + 1].Amount + rand.Next(10), AcceptedAmount = rand.Next(2) > 0 ? generatedContractLines[k * 2 + 1].Amount : generatedContractLines[k * 2 + 1].Amount - 1, }; db.AddRange(receiptLineUnderdeliveryOK, receiptLineUnderdeliveryWrong); db.SaveChanges(); } } else { //без недопоставок for (int k = 0; k < amountReceiptOrders; k++) { ReceiptOrder receiptOrder = new ReceiptOrder() { ReceiptOrderNumber = i.ToString() + k.ToString(), PK_Warehouse = warehouse.PK_Warehouse, PK_Provider = generatedContract.PK_Provider, PK_Contract = generatedContract.PK_Contract, DeliveryDate = generatedContractLines[k * 2].DeliveryDate, }; db.ReceiptOrders.Add(receiptOrder); db.SaveChanges(); ReceiptOrderLine receiptLineFirst = new ReceiptOrderLine() { PK_ReceiptOrder = receiptOrder.PK_ReceiptOrder, UnitPrice = Decimal.Parse(rand.Next(1, 10000).ToString()), PK_Resource = generatedContractLines[k * 2].PK_Resource, DocumentAmount = generatedContractLines[k * 2].Amount + rand.Next(10), AcceptedAmount = generatedContractLines[k * 2].Amount, }; ReceiptOrderLine receiptLineSecond = new ReceiptOrderLine() { PK_ReceiptOrder = receiptOrder.PK_ReceiptOrder, UnitPrice = Decimal.Parse(rand.Next(1, 10000).ToString()), PK_Resource = generatedContractLines[k * 2 + 1].PK_Resource, DocumentAmount = generatedContractLines[k * 2 + 1].Amount + rand.Next(10), AcceptedAmount = generatedContractLines[k * 2 + 1].Amount, }; db.AddRange(receiptLineFirst, receiptLineSecond); db.SaveChanges(); } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(false); } return(true); }
public FormAnalysis(Contract contract) { InitializeComponent(); this.contract = contract; lbl_header.Text = "Анализ поставок по договору №" + contract.ContractNumber + " от " + contract.ConclusionDate.ToString("dd.MM.yyyy") + " (" + (contract.IsOpened ? "ОТКРЫТ)" : "ЗАКРЫТ)"); int pk_contract = contract.PK_Contract; lines = contract.getContractLines(); List <ReceiptOrderLine> receiptLines = Program.db.ReceiptOrderLines.ToList() .Where(b => b.ReceiptOrder.PK_Contract == pk_contract) .OrderBy(b => b.ReceiptOrder.DeliveryDate) .ToList(); int linesCount = lines.Count; ContractLine line; for (int i = 0; i < linesCount; i++) { dgv_analysis.Rows.Add(); line = lines[i]; ReceiptOrderLine thisLine = receiptLines.FindAll(b => b.PK_Resource == line.PK_Resource) .Where(b => b.ReceiptOrder.DeliveryDate <= line.DeliveryDate) .FirstOrDefault(); if (thisLine != null) { DateTime dateFact = thisLine.ReceiptOrder.DeliveryDate; float amountFact = thisLine.AcceptedAmount; dgv_analysis.Rows[i].Cells[6].Value = dateFact.ToString("dd-MM-yyyy"); dgv_analysis.Rows[i].Cells[8].Value = thisLine == null ? "0" : thisLine.AcceptedAmount.ToString(); dgv_analysis.Rows[i].Cells[9].Value = line.Amount - thisLine.AcceptedAmount; dgv_analysis.Rows[i].Cells[11].Value = line.UnitPrice * (decimal)(line.Amount - thisLine.AcceptedAmount); receiptLines.Remove(thisLine); } else { dgv_analysis.Rows[i].Cells[6].Value = "-"; dgv_analysis.Rows[i].Cells[8].Value = 0; dgv_analysis.Rows[i].Cells[9].Value = line.Amount; dgv_analysis.Rows[i].Cells[11].Value = (decimal)line.Amount * line.UnitPrice; } dgv_analysis.Rows[i].Cells[0].Value = line.PK_ContractLine; dgv_analysis.Rows[i].Cells[1].Value = line.Resource; dgv_analysis.Rows[i].Cells[2].Value = line.Resource_Cipher; dgv_analysis.Rows[i].Cells[3].Value = line.Resource_Unit; dgv_analysis.Rows[i].Cells[4].Value = line.Resource_Cipher; dgv_analysis.Rows[i].Cells[5].Value = line.DeliveryDate.ToString("dd-MM-yyyy"); dgv_analysis.Rows[i].Cells[7].Value = line.Amount; dgv_analysis.Rows[i].Cells[10].Value = line.UnitPrice; float amountUnderdelivery = 0; if (float.TryParse(dgv_analysis.Rows[i].Cells[9].Value.ToString(), System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture, out amountUnderdelivery)) { if (amountUnderdelivery <= 0) { dgv_analysis.Rows[i].Cells[9].Value = "Отсутствуют"; dgv_analysis.Rows[i].Cells[11].Value = "-"; } } } }
private void findContracts() { pb_updateTable.Value = 0; List <Contract> foundContracts = new List <Contract>(); bool contractNumberCriterium = tb_contractNumber.Text != string.Empty; string contractNumber = tb_contractNumber.Text.ToLower(); Provider providerSelect = (Provider)cb_provider.SelectedItem; bool providerCriterium = false; int PK_Provider = -1; if (providerSelect != null) { providerCriterium = true; PK_Provider = providerSelect.PK_Provider; } Resource resourceSelect = (Resource)cb_resource.SelectedItem; bool resourceCriterium = false; if (resourceSelect != null) { resourceCriterium = true; } bool conclusionCityCriterium = tb_conclusionCity.Text != ""; string conclusionCity = tb_conclusionCity.Text; bool conclusionCriterium = dtp_conclusionDate.CustomFormat.ToString() != " "; string conclusionDate = dtp_conclusionDate.Value.ToString("dd-MM-yyyy"); bool startFromCriterium = dtp_startDateFrom.CustomFormat.ToString() != " "; DateTime startFromDate = DateTime.Parse(dtp_startDateFrom.Value.ToString("dd-MM-yyyy")); bool expiredFromCriterium = dtp_expiredDateFrom.CustomFormat.ToString() != " "; DateTime expiredFromDate = DateTime.Parse(dtp_expiredDateFrom.Value.ToString("dd-MM-yyyy")); bool startToCriterium = dtp_startDateTo.CustomFormat.ToString() != " "; DateTime startToDate = DateTime.Parse(dtp_startDateTo.Value.ToString("dd-MM-yyyy")); bool expiredToCriterium = dtp_expiredDateTo.CustomFormat.ToString() != " "; DateTime expiredToDate = DateTime.Parse(dtp_expiredDateTo.Value.ToString("dd-MM-yyyy")); bool statusCriterium = !rb_any.Checked; bool hasUnderdeliveryCriterium = cb_hasUnderdelivery.Checked; List <Contract> cycleContracts = Program.db.Contracts.ToList(); int pb_value = (contracts.Count / 100); int pb_unitValue = 0; foreach (Contract contract in cycleContracts) { pb_unitValue++; if (pb_unitValue >= pb_value && pb_updateTable.Value < 100) { pb_updateTable.Value += 1; pb_unitValue = 0; } bool contractNumberFound = !contractNumberCriterium; bool providerFound = !providerCriterium; bool resourceFound = !resourceCriterium; bool conclusionCityFound = !conclusionCityCriterium; bool conclusionFound = !conclusionCriterium; bool startFromFound = !startFromCriterium; bool expiredFromFound = !expiredFromCriterium; bool startToFound = !startToCriterium; bool expiredToFound = !expiredToCriterium; bool statusFound = !statusCriterium; bool hasUnderdeliveryFound = !hasUnderdeliveryCriterium; // ContractNumber criterium if (contractNumberCriterium && contract.ContractNumber.Contains(contractNumber)) { contractNumberFound = true; } // Provider criterium if (providerCriterium && contract.Provider.PK_Provider == PK_Provider) { providerFound = true; } // Resource criterium if (resourceCriterium && contract.checkResourceInContract(resourceSelect)) { resourceFound = true; } // ConclusionCity criterium if (conclusionCityCriterium && contract.ConclusionCity.Contains(conclusionCity)) { conclusionCityFound = true; } // Conclusion criterium if (conclusionCriterium && contract.ConclusionDateWithoutTime.Contains(conclusionDate)) { conclusionFound = true; } // Start criterium if (startFromCriterium && DateTime.Compare(contract.StartDate, startFromDate) >= 0) { startFromFound = true; } if (startToCriterium && DateTime.Compare(contract.StartDate, startToDate) <= 0) { startToFound = true; } // Expired criterium if (expiredFromCriterium && DateTime.Compare(contract.ExpiredDate, expiredFromDate) >= 0) { expiredFromFound = true; } if (expiredToCriterium && DateTime.Compare(contract.ExpiredDate, expiredToDate) <= 0) { expiredToFound = true; } // Status criterium if (statusCriterium && (contract.IsOpened && rb_opened.Checked) || (!contract.IsOpened && rb_closed.Checked)) { statusFound = true; } // Hasundetdelivery criterium if (hasUnderdeliveryCriterium) { List <ContractLine> contractLines = contract.getContractLines(); List <ReceiptOrderLine> receiptLines = Program.db.ReceiptOrderLines.ToList() .Where(b => b.ReceiptOrder.PK_Contract == contract.PK_Contract) .OrderBy(b => b.ReceiptOrder.DeliveryDate) .ToList(); for (int i = 0; i < contractLines.Count; i++) { ContractLine line = contractLines[i]; ReceiptOrderLine thisLine = receiptLines.FindAll(b => b.PK_Resource == line.PK_Resource) .Where(b => b.ReceiptOrder.DeliveryDate <= line.DeliveryDate) .FirstOrDefault(); if (thisLine == null) { hasUnderdeliveryFound = true; break; } else { if (line.Amount - thisLine.AcceptedAmount > 0) { hasUnderdeliveryFound = true; break; } receiptLines.Remove(thisLine); } } } // Add this contract to foundContracts if it passed all criteriums if (contractNumberFound && providerFound && conclusionFound && startFromFound && expiredFromFound && statusFound && startToFound && expiredToFound && conclusionCityFound && resourceFound && hasUnderdeliveryFound) { foundContracts.Add(contract); } } contracts = foundContracts; }