Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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 = "-";
                    }
                }
            }
        }
Esempio n. 5
0
        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;
        }