Пример #1
0
        // Обновление списка связаных с сущностью файлов
        public static void UpdateRelatedFilesOfEntity(TenderContext tc,
                                                      ICollection <UploadedFile> entityFilesCollection,
                                                      ICollection <UploadedFile> filesList,
                                                      ICollection <UploadedFile> deletingFilesList)
        {
            entityFilesCollection.Clear();
            tc.SaveChanges();
            foreach (var file in filesList)
            {
                if (file.Id > 0)
                {
                    tc.UploadedFiles.Attach(file);
                    tc.Entry <UploadedFile>(file).State = System.Data.Entity.EntityState.Modified;
                }
                entityFilesCollection.Add(file);
                FileManager.UploadFile(file);
            }

            foreach (var file in deletingFilesList)
            {
                if (file.Id > 0)
                {
                    tc.UploadedFiles.Attach(file);
                    tc.UploadedFiles.Remove(file);
                }
                try
                {
                    File.Delete(Path.Combine(UploadFilesDir, file.PhisicalName));
                }
                catch (Exception ex) { }
            }

            tc.SaveChanges();
        }
Пример #2
0
        private void SaveDataToDb()
        {
            using (TenderContext tc = new TenderContext())
            {
                currentEstimate.Name = estimateNameTextBox.Text.Trim();
                if (currentEstimate.Id > 0)
                {
                    tc.Estimates.Attach(currentEstimate);
                    tc.Entry <Estimate>(currentEstimate).State = System.Data.Entity.EntityState.Modified;

                    // Удаляем старые записи сметы
                    var oldBalanceChanges = tc.BalanceChanges.Where(p => (p.EstimateId == currentEstimate.Id && p.PrimaryKekvSum >= 0 && p.SecondaryKekvSum >= 0));
                    tc.BalanceChanges.RemoveRange(oldBalanceChanges);

                    tc.SaveChanges();
                }
                else
                {
                    tc.TenderYears.Attach(currentEstimate.Year);
                    tc.Estimates.Add(currentEstimate);
                    tc.SaveChanges();
                }

                for (int i = 0; i < estimateMoneyList.Count; i++)
                {
                    for (int j = 0; j < kekvsList.Count; j++)
                    {
                        for (int k = 0; k < monthes.Length; k++)
                        {
                            BalanceChanges incommingMoney = new BalanceChanges();
                            incommingMoney.DateOfReceiving  = new DateTime((int)currentEstimate.Year.Year, (k + 1), 1, 0, 0, 0);
                            incommingMoney.EstimateId       = currentEstimate.Id;
                            incommingMoney.MoneySourceId    = estimateMoneyList[i].Source.Id;
                            incommingMoney.PrimaryKekvId    = incommingMoney.SecondaryKekvId = kekvsList[j].Id;
                            incommingMoney.PrimaryKekvSum   = estimateMoneyList[i].PrimarySumValues[j, k];
                            incommingMoney.SecondaryKekvSum = estimateMoneyList[i].SecondarySumValues[j, k];
                            tc.BalanceChanges.Add(incommingMoney);
                        }
                    }
                }

                tc.SaveChanges();

                FileManager.UpdateRelatedFilesOfEntity(tc, currentEstimate.RelatedFiles, relatedFiles, deletingFiles);

                wasDbChanged = true;
            }
        }
Пример #3
0
        private void deleteContractorButton_Click(object sender, EventArgs e)
        {
            Contractor selectedContractor = contractorsTable.SelectedRows[0].DataBoundItem as Contractor;

            if (NotificationHelper.ShowYesNoQuestion(string.Format("Ви впевнені, що хочете видалити інформацію про \"{0}\"?", selectedContractor.ShortName)))
            {
                using (TenderContext tc = new TenderContext())
                {
                    bool entityHasReferences = tc.Contracts.Where(p => p.ContractorId == selectedContractor.Id).Any();
                    if (entityHasReferences)
                    {
                        NotificationHelper.ShowError(string.Format("Видалення інформації про контрагента \"{0}\" неможливе, оскільки під нього є зареєстровані договори!", selectedContractor.ShortName));
                        return;
                    }
                    else
                    {
                        tc.Contractors.Attach(selectedContractor);
                        tc.Contractors.Remove(selectedContractor);
                        tc.SaveChanges();

                        NotificationHelper.ShowInfo("Контрагент успішно видалений!");
                        if (!reloadContractorsListWorker.IsBusy)
                        {
                            ToggleLoadAnimation();
                            reloadContractorsListWorker.RunWorkerAsync();
                            wasDbUpdated = true;
                        }
                    }
                }
            }
        }
Пример #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(codeTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не зазначили код");
                return;
            }
            if (!Regex.IsMatch(codeTextBox.Text.Trim(), "[0-9]{8}-[0-9]"))
            {
                NotificationHelper.ShowError("Неправильний формат коду. Код повинен відповідати формату ХХХХХХХХ-Х. Де Х - число від 0 до 9");
                return;
            }
            if (string.IsNullOrWhiteSpace(nameTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не зазначили назву для кода");
                return;
            }

            using (TenderContext tc = new TenderContext())
            {
                if (codeRecord == null)
                {
                    codeRecord = new DkCode();
                }
                else
                {
                    tc.DkCodes.Attach(codeRecord);
                }

                bool codeExist = tc.DkCodes.Where(p => p.Code.Equals(codeTextBox.Text.Trim())).Any();
                if (codeExist && (codeRecord.Id == 0))
                {
                    NotificationHelper.ShowError("Такий код вже існує");
                    return;
                }

                codeRecord.Code = codeTextBox.Text.Trim();
                codeRecord.Name = nameTextBox.Text.Trim();

                if (codeRecord.Id == 0)
                {
                    tc.DkCodes.Add(codeRecord);
                }
                else
                {
                    tc.Entry <DkCode>(codeRecord).State = System.Data.Entity.EntityState.Modified;
                }

                tc.SaveChanges();
                wasDbUpdated = true;
                this.Close();
            }
        }
Пример #5
0
        public static void CreateUser(string username, string password, string description)
        {
            User newUser = new User
            {
                Name         = username,
                PasswordHash = Convert.ToBase64String(GetPasswordHash(password)),
                Description  = description
            };

            using (TenderContext tc = new TenderContext())
            {
                tc.Users.Add(newUser);
                tc.SaveChanges();
            }
        }
Пример #6
0
        public static bool ChangeUserPassword(string username, string oldPassword, string newPassword)
        {
            // Проверяем старый пароль
            if (AuthorizeUser(username, oldPassword))
            {
                using (TenderContext tc = new TenderContext())
                {
                    User target = tc.Users.Where(p => p.Name.Equals(username)).FirstOrDefault();
                    target.PasswordHash           = Convert.ToBase64String(GetPasswordHash(newPassword));
                    tc.Entry <User>(target).State = System.Data.Entity.EntityState.Modified;

                    tc.SaveChanges();
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }
Пример #7
0
        private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            DkCode selectedCode = dkCodesTable.SelectedRows[0].DataBoundItem as DkCode;

            using (TenderContext tc = new TenderContext())
            {
                bool codeHasReferences = tc.TenderPlanRecords.Where(p => (p.DkCodeId == selectedCode.Id)).Any();
                if (codeHasReferences)
                {
                    NotificationHelper.ShowError("Неможливо видалити код, оскільки під нього існують записи у річних планах закупівель");
                    return;
                }
                else
                {
                    tc.DkCodes.Attach(selectedCode);
                    tc.DkCodes.Remove(selectedCode);
                    tc.SaveChanges();

                    codesList.Remove(selectedCode);
                    NotificationHelper.ShowInfo("Код успішно видалений!");
                    wasDbUpdated = true;
                }
            }
        }
Пример #8
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(spendingDescription.Text))
            {
                NotificationHelper.ShowError("Ви не вказали стислий опис витрати");
                return;
            }

            if (estimateCBList.SelectedIndex < 0)
            {
                NotificationHelper.ShowError("Ви не обрали кошторис");
                return;
            }

            if (mainKekvCBList.SelectedIndex < 0)
            {
                NotificationHelper.ShowError("Ви не обрали основний КЕКВ");
                return;
            }
            if (altKekvCBList.SelectedIndex < 0)
            {
                NotificationHelper.ShowError("Ви не обрали старий КЕКВ");
                return;
            }
            if (spendingFullSum.Value <= 0)
            {
                NotificationHelper.ShowError("Сумма витрати повинна бути быльна за нуль");
                return;
            }

            if (!newStatusRButton.Checked && spendingFullSum.Value != GetTableTotalSum())
            {
                NotificationHelper.ShowError("Загальна сума витрати не дорівнює загальній сумі яку потрібно зняти з джерел фінансування");
                return;
            }

            using (TenderContext tc = new TenderContext())
            {
                Estimate selectedEstimate = estimateCBList.SelectedItem as Estimate;
                KekvCode selectedMainKekv = mainKekvCBList.SelectedItem as KekvCode;
                KekvCode selectedAltKekv  = altKekvCBList.SelectedItem as KekvCode;

                if (spendingRecord.Id > 0)
                {
                    tc.PlannedSpending.Attach(spendingRecord);
                    tc.Entry <PlannedSpending>(spendingRecord).State = EntityState.Modified;
                }

                spendingRecord.Description     = spendingDescription.Text.Trim();
                spendingRecord.CreationDate    = dateTimePicker1.Value;
                spendingRecord.EstimateId      = selectedEstimate.Id;
                spendingRecord.PrimaryKekvId   = selectedMainKekv.Id;
                spendingRecord.SecondaryKekvId = selectedAltKekv.Id;
                spendingRecord.Sum             = spendingFullSum.Value;

                // Удаляем старые записи об изменениях в балансе
                foreach (var item in spendingRecord.Changes.ToList())
                {
                    tc.BalanceChanges.Attach(item);
                    tc.Entry <BalanceChanges>(item).State = EntityState.Deleted;
                }
                tc.SaveChanges();

                if (onPayStatusRButton.Checked || paidStatusRButton.Checked)
                {
                    for (int i = 0; i < sourcesList.Count; i++)
                    {
                        decimal balanceChangeOnSource = Convert.ToDecimal(balanceChangesTable.Rows[i].Cells[0].Value);

                        if (balanceChangeOnSource == 0)
                        {
                            continue;
                        }

                        spendingRecord.Changes.Add(new BalanceChanges
                        {
                            DateOfReceiving  = spendingRecord.CreationDate,
                            MoneySourceId    = sourcesList[i].Id,
                            PrimaryKekvId    = spendingRecord.PrimaryKekvId,
                            SecondaryKekvId  = spendingRecord.SecondaryKekvId,
                            EstimateId       = spendingRecord.EstimateId,
                            PrimaryKekvSum   = -balanceChangeOnSource,
                            SecondaryKekvSum = -balanceChangeOnSource,
                        });
                    }

                    spendingRecord.IsPaid = paidStatusRButton.Checked;
                    tc.SaveChanges();
                }

                if (spendingRecord.Id == 0)
                {
                    tc.PlannedSpending.Add(spendingRecord);
                }
                tc.SaveChanges();

                FileManager.UpdateRelatedFilesOfEntity(tc, spendingRecord.RelatedFiles, relatedFiles, deletingFiles);

                NotificationHelper.ShowInfo("Дані успішно збережені!");
                dbWasChanged = true;
                this.Close();
            }
        }
Пример #9
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(shortNameTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не вказали скорочену назву контрагента");
                return;
            }
            if (string.IsNullOrWhiteSpace(edrTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не вказали код ЄДРПОУ");
                return;
            }
            if (string.IsNullOrWhiteSpace(legalAdressTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не вказали юридичну адресу");
                return;
            }
            if (string.IsNullOrWhiteSpace(actualAdressTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не вказали фактичну адресу");
                return;
            }

            using (TenderContext tc = new TenderContext())
            {
                if (contractorRecord.Id > 0)
                {
                    tc.Contractors.Attach(contractorRecord);
                }
                else
                {
                    // Проверяем существует ли в базе контрагент с таким кодом ЕГРПОУ
                    Contractor existingContractor = tc.Contractors.Where(p => p.EdrCode.Equals(edrTextBox.Text.Trim())).FirstOrDefault();

                    if (existingContractor != null)
                    {
                        NotificationHelper.ShowError(string.Format("За даним кодом ЄДРПОУ вже зареєстрований контрагент '{0}'", existingContractor.ShortName));
                        return;
                    }
                }

                contractorRecord.LongName      = fullNameTextBox.Text.Trim();
                contractorRecord.ShortName     = shortNameTextBox.Text.Trim();
                contractorRecord.EdrCode       = edrTextBox.Text.Trim();
                contractorRecord.LegalAddress  = legalAdressTextBox.Text.Trim();
                contractorRecord.ActualAddress = actualAdressTextBox.Text.Trim();
                contractorRecord.Description   = descriptionTextBox.Text.Trim();

                if (contractorRecord.Id == 0)
                {
                    tc.Contractors.Add(contractorRecord);
                    tc.SaveChanges();
                }

                foreach (var item in deletingContacts)
                {
                    tc.ContactPersons.Attach(item);
                    tc.ContactPersons.Remove(item);
                }
                tc.SaveChanges();

                contractorRecord.Persons.Clear();
                foreach (var item in contactsList)
                {
                    if (item.Id > 0)
                    {
                        tc.ContactPersons.Attach(item);
                        tc.Entry <ContactPerson>(item).State = System.Data.Entity.EntityState.Modified;
                    }

                    contractorRecord.Persons.Add(item);
                }

                FileManager.UpdateRelatedFilesOfEntity(tc, contractorRecord.RelatedFiles, relatedFiles, deletingFilesList);

                tc.SaveChanges();
                NotificationHelper.ShowInfo("Дані успішно збережені!");
                wasDbUpdated = true;
                this.Close();
            }
        }
Пример #10
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(numberTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не ввели номер рахунку");
                return;
            }
            if (invoiceFullSum.Value == 0)
            {
                NotificationHelper.ShowError("Сумма рахунку повинна бути більша за 0");
                return;
            }
            if (contractorsCBList.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не обрали контрагента");
                return;
            }
            if (contractsCBList.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не обрали договір");
                return;
            }
            if (!newStatusRButton.Checked && invoiceFullSum.Value != GetTableTotalSum())
            {
                NotificationHelper.ShowError("Загальна сума рахунку не дорівнює загальній сумі яку потрібно зняти з джерел фінансування");
                return;
            }

            using (TenderContext tc = new TenderContext())
            {
                Contract selectedContract = contractsCBList.SelectedItem as Contract;

                // Если мы создаём новый счёт - проверяем доступный для него остаток по договору
                if ((invoiceRecord.Id == 0) && (invoiceFullSum.Value > selectedContract.MoneyRemain))
                {
                    NotificationHelper.ShowError("На договорі недостатньо коштів для проплати данного рахунку");
                    return;
                }

                if (invoiceRecord.Id > 0)
                {
                    if (invoiceFullSum.Value > (selectedContract.MoneyRemain + invoiceRecord.Sum))
                    {
                        NotificationHelper.ShowError("На договорі недостатньо коштів для проплати вказаної суми");
                        return;
                    }

                    tc.Invoices.Attach(invoiceRecord);
                    tc.Entry <Invoice>(invoiceRecord).State = EntityState.Modified;
                }


                invoiceRecord.IsCredit    = IsCreditCheckBox.Checked;
                invoiceRecord.Number      = numberTextBox.Text.Trim();
                invoiceRecord.Description = descriptionTextBox.Text.Trim();
                invoiceRecord.ContractId  = selectedContract.Id;
                invoiceRecord.Date        = invoiceDate.Value;
                invoiceRecord.Sum         = invoiceFullSum.Value;

                // Удаляем старые записи об изменениях в балансе
                foreach (var item in invoiceRecord.Changes.ToList())
                {
                    tc.BalanceChanges.Attach(item);
                    tc.Entry <BalanceChanges>(item).State = EntityState.Deleted;
                }
                tc.SaveChanges();

                if (onPayStatusRButton.Checked || paidStatusRButton.Checked)
                {
                    for (int i = 0; i < sourcesList.Count; i++)
                    {
                        decimal balanceChangeOnSource = Convert.ToDecimal(balanceChangesTable.Rows[i].Cells[0].Value);

                        if (balanceChangeOnSource == 0)
                        {
                            continue;
                        }

                        invoiceRecord.Changes.Add(new BalanceChanges
                        {
                            DateOfReceiving  = invoiceRecord.Date,
                            MoneySourceId    = sourcesList[i].Id,
                            PrimaryKekvId    = selectedContract.RecordInPlan.PrimaryKekvId,
                            SecondaryKekvId  = selectedContract.RecordInPlan.SecondaryKekvId,
                            EstimateId       = selectedContract.RecordInPlan.EstimateId,
                            PrimaryKekvSum   = -balanceChangeOnSource,
                            SecondaryKekvSum = -balanceChangeOnSource,
                        });
                    }

                    invoiceRecord.IsPaid = paidStatusRButton.Checked;
                    tc.SaveChanges();
                }

                if (invoiceRecord.Id == 0)
                {
                    tc.Invoices.Add(invoiceRecord);
                }
                tc.SaveChanges();

                FileManager.UpdateRelatedFilesOfEntity(tc, invoiceRecord.RelatedFiles, relatedFiles, deletingFiles);

                NotificationHelper.ShowInfo("Дані успішно збережені!");
                dbWasChanged = true;
                this.Close();
            }
        }
Пример #11
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (estimatesCBList.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не вибрали кошторис");
                return;
            }

            if (mainKekv.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не вибрали основний КЕКВ");
                return;
            }

            if (altKekv.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не вибрали старий КЕКВ");
                return;
            }

            if (dkCodeSum.Value == 0 && planRecord == null)
            {
                NotificationHelper.ShowError("Сума повинна бути більша за 0");
                return;
            }

            if (string.IsNullOrWhiteSpace(conctretePlanItemName.Text.Trim()))
            {
                NotificationHelper.ShowError("Ви не вказали конкретну назву предмету");
                return;
            }

            if (dkCodesCBList.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не вибрали код за ДК");
                return;
            }

            if (isCodeRepeatCheckBox.Checked && string.IsNullOrWhiteSpace(codeRepeatReasonTextBox.Text))
            {
                NotificationHelper.ShowError("Ви не вказали причину створення ще одного запису з існуючим кодом");
                return;
            }

            string msg = string.Empty;
            string actionDescriptionPrefix = string.Empty;

            if (planRecord != null)
            {
                msg = "Вкажіть причину вказаної зміни коду";
                actionDescriptionPrefix = "[ЗМІНА КОДУ]";
            }
            else
            {
                msg = "Прокоментуйте створення коду (необов'язково)";
                actionDescriptionPrefix = "[СТВОРЕННЯ КОДУ]";
            }

            ActionCommentForm af = new ActionCommentForm(msg);

            af.ShowDialog();

            string actionDescription = af.ReasonDescription;

            // Для изменение кода указание причины необходимо
            if (planRecord != null && actionDescription == null)
            {
                NotificationHelper.ShowError("Зміна коду без зазначення причини неможлива");
                return;
            }

            if (planRecord == null)
            {
                planRecord = new TenderPlanRecord();
            }

            using (TenderContext tc = new TenderContext())
            {
                if (planRecord.Id != 0)
                {
                    tc.TenderPlanRecords.Attach(planRecord);
                    tc.Entry <TenderPlanRecord>(planRecord).State = System.Data.Entity.EntityState.Modified;
                }
                else
                {
                    tc.TenderPlanRecords.Add(planRecord);
                }

                Estimate selectedEstimate    = estimatesCBList.SelectedItem as Estimate;
                KekvCode selectedPrimaryKekv = (mainKekv.SelectedItem as KekvRemain).Kekv;
                KekvCode selectedAltKekv     = (altKekv.SelectedItem as KekvRemain).Kekv;

                planRecord.EstimateId      = selectedEstimate.Id;
                planRecord.DkCodeId        = Convert.ToInt32(dkCodesCBList.SelectedValue);
                planRecord.PrimaryKekvId   = selectedPrimaryKekv.Id;
                planRecord.SecondaryKekvId = selectedAltKekv.Id;
                planRecord.DateOfCreating  = planRecord.DateOfLastChange = DateTime.Now;
                planRecord.ProcedureType   = (ProcedureType)procedureTypeCBList.SelectedValue;

                planRecord.CodeRepeatReason = isCodeRepeatCheckBox.Checked ? codeRepeatReasonTextBox.Text.Trim() : null;

                decimal changeOfSum = dkCodeSum.Value;
                planRecord.IsTenderComplete = isProcedureComplete.Checked;
                planRecord.TenderBeginDate  = tenderBeginDate.Value;
                planRecord.PlannedSum       = dkCodeSum.Value;
                planRecord.ConcreteName     = conctretePlanItemName.Text;
                planRecord.DateOfLastChange = DateTime.Now;
                planRecord.ProtocolNum      = protocolNum.Text.Trim();
                planRecord.ProtocolDate     = protocolDate.Value;
                planRecord.BasedOnNeed      = basedOnNeed.Checked;

                TenderPlanRecordChange tpChange = new TenderPlanRecordChange();
                if (!string.IsNullOrWhiteSpace(actionDescription))
                {
                    tpChange.Description = actionDescriptionPrefix + '\n' + actionDescription;
                }
                else
                {
                    tpChange.Description = actionDescriptionPrefix;
                }
                tpChange.DateOfChange        = DateTime.Now;
                tpChange.TenderPlanRecordId  = planRecord.Id;
                tpChange.ChangeOfSum         = changeOfSum;
                tpChange.ChangedConcreteName = planRecord.ConcreteName;

                tc.SaveChanges();

                FileManager.UpdateRelatedFilesOfEntity(tc, planRecord.RelatedFiles, relatedFiles, deletingFiles);

                planRecord.Changes.Add(tpChange);
                tc.TenderPlanRecordChanges.Add(tpChange);
                tc.SaveChanges();

                NotificationHelper.ShowInfo("Зміни до річного плану успішно внесено");
                dbWasChanged = true;
                Close();
            }
        }
Пример #12
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(number.Text))
            {
                NotificationHelper.ShowError("Ви не вказали номер договору");
                return;
            }

            if (tenderPlanRecordPicker1.SelectedRecord == null)
            {
                NotificationHelper.ShowError("Для реєстрації договору потрібно обрати запис у річному плані.");
                return;
            }

            if ((currentContract.Id == 0) && (fullSum.Value == 0))
            {
                NotificationHelper.ShowError("Сума договору повинна бути більша за нуль");
                return;
            }

            if (contractorCBList.SelectedItem == null)
            {
                NotificationHelper.ShowError("Ви не обрали контрагента");
                return;
            }

            StringBuilder contractChanges = new StringBuilder(string.Empty);

            using (TenderContext tc = new TenderContext())
            {
                if (currentContract.Id > 0)
                {
                    tc.Contracts.Attach(currentContract);

                    // Записываем изменения внесённые пользователем
                    if (currentContract.Sum != fullSum.Value)
                    {
                        contractChanges.Append(string.Format("[Сумма договору змінена з '{0}' на '{1}']\n",
                                                             currentContract.Sum, fullSum.Value));
                    }
                    if (!currentContract.Number.Equals(number.Text))
                    {
                        contractChanges.Append(string.Format("[Номер договору змінений з '{0}' на '{1}']\n",
                                                             currentContract.Number, number.Text));
                    }
                    if (currentContract.SignDate != dateOfSigning.Value)
                    {
                        contractChanges.Append(string.Format("[Дата підписання договору змінена з '{0}' на '{1}']\n",
                                                             currentContract.SignDate.ToShortDateString(), dateOfSigning.Value.ToShortDateString()));
                    }
                    if (currentContract.BeginDate != dateOfStart.Value)
                    {
                        contractChanges.Append(string.Format("[Дата набуття чинності договору змінена з '{0}' на '{1}']\n",
                                                             currentContract.BeginDate.ToShortDateString(), dateOfStart.Value.ToShortDateString()));
                    }
                    if (currentContract.EndDate != dateOfEnd.Value)
                    {
                        contractChanges.Append(string.Format("[Дата закінчення договору змінена з '{0}' на '{1}']\n",
                                                             currentContract.EndDate.ToShortDateString(), dateOfEnd.Value.ToShortDateString()));
                    }

                    // Если были изменения - необходимо указать причину изменений
                    if (!string.IsNullOrWhiteSpace(contractChanges.ToString()))
                    {
                        ActionCommentForm af = new ActionCommentForm();
                        af.ShowDialog();

                        if (af.ReasonDescription == null)
                        {
                            NotificationHelper.ShowError("Без зазначення причини змін вони не будуть внесені в базу даних!");
                            return;
                        }
                        else
                        {
                            contractChanges.Append(string.Format("Причина: {0}", af.ReasonDescription));
                            currentContract.ContractChanges.Add(new ContractChange
                            {
                                DateOfChange = DateTime.Now,
                                ContractId   = currentContract.Id,
                                Description  = contractChanges.ToString()
                            });
                        }
                    }
                }

                currentContract.Number             = number.Text.Trim();
                currentContract.SignDate           = dateOfSigning.Value;
                currentContract.BeginDate          = dateOfStart.Value;
                currentContract.EndDate            = dateOfEnd.Value;
                currentContract.ContractorId       = (contractorCBList.SelectedItem as Contractor).Id;
                currentContract.TenderPlanRecordId = tenderPlanRecordPicker1.SelectedRecord.Id;
                currentContract.Description        = description.Text.Trim();
                currentContract.Sum = fullSum.Value;

                if (currentContract.Id == 0)
                {
                    tc.Contracts.Add(currentContract);
                }
                else
                {
                    tc.Entry <Contract>(currentContract).State = System.Data.Entity.EntityState.Modified;
                }
                tc.SaveChanges();

                FileManager.UpdateRelatedFilesOfEntity(tc, currentContract.RelatedFiles, relatedFiles, deletingFiles);

                dbWasChanged = true;
                NotificationHelper.ShowInfo("Дані успішно збережено до бази!");
                this.Close();
            }
        }