/// <summary> /// Процедура сохранения договора в базе данных. /// </summary> /// <param name="model">Текущая модель.</param> /// <param name="error">Переменная для возврата текста сообщения об ошибке.</param> public bool SaveGpdContract(GpdContractEditModel model, out string error) { error = string.Empty; //нельзя отменить договор, если есть занесеный акт if (model.StatusID == 3 && GpdContractDao.ExistsReadyActs(model.Id)) { error = "Нельзя отклонить данный договор, так как к нему уже есть готовые акты! Чтобы отменить занесение договора нужно, чтобы акт имел статус черновика!"; return false; } UserRole currentUserRole = AuthenticationService.CurrentUser.UserRole; IUser currentUseId = AuthenticationService.CurrentUser; try { GpdContract gpdContract;// = GpdContractDao.Get(model.Id); if (model.Id == 0) { gpdContract = new GpdContract { CreatorID = currentUseId.Id, DepartmentId = model.DepartmentId, PersonID = model.PersonID, CTID = model.CTID, StatusID = model.StatusID, NumContract = model.NumContract, NameContract = model.NameContract, DateBegin = model.DateBegin, DateEnd = model.DateEnd, GPDID = model.GPDID, GPDContractID = model.GPDContractID, PurposePayment = model.PurposePayment, DateP = model.DateP, IsLong = model.DateP.HasValue ? true : false, PaymentPeriodID = model.PaymentPeriodID, Amount = model.Amount, //DSID = model.DSID, PayerID = model.PayerID, PayeeID = model.PayeeID, PAccountID = model.PAccountID, MagEntities = new List<GpdMagProlongation>() }; } else { gpdContract = GpdContractDao.Get(model.Id); //if (model.DateP.HasValue && gpdContract.StatusID != 4) //{ // gpdContract.StatusID = model.StatusID == 3 ? 4 : model.StatusID; // if (model.DateP.HasValue && model.DatePOld.Value != model.DateP.Value) // { // gpdContract.DateP = model.DateP.Value; // gpdContract.IsLong = model.DateP.HasValue ? true : false; // gpdContract.EditDate = DateTime.Now; // gpdContract.EditorID = currentUseId.Id; // } //} //else //{ // //gpdContract.CreatorID = model.CreatorID; //} gpdContract.DepartmentId = model.DepartmentId; gpdContract.PersonID = model.PersonID; gpdContract.CTID = model.CTID; gpdContract.StatusID = model.SendTo1C.HasValue ? 1 : model.StatusID == 3 ? 4 : model.StatusID; gpdContract.NumContract = model.NumContract; gpdContract.NameContract = model.NameContract; gpdContract.DateBegin = model.DateBegin.Value; gpdContract.DateEnd = model.DateEnd.Value; gpdContract.GPDID = model.GPDID; gpdContract.GPDContractID = model.GPDContractID; gpdContract.PurposePayment = model.PurposePayment; gpdContract.PaymentPeriodID = model.PaymentPeriodID; gpdContract.Amount = model.Amount; //gpdContract.DSID = model.DSID; gpdContract.PayerID = model.PayerID; gpdContract.PayeeID = model.PayeeID; gpdContract.PAccountID = model.PAccountID; gpdContract.EditDate = DateTime.Now; gpdContract.EditorID = currentUseId.Id; if (model.DateP.HasValue) { gpdContract.DateP = model.DateP.Value; gpdContract.IsLong = true; //gpdContract.StatusID = model.StatusID; } else gpdContract.IsLong = false; } //если некоторые поля необязательны или сохраняем черновик if (gpdContract.CTID == 0) gpdContract.CTID = null; if (gpdContract.PersonID == 0) gpdContract.PersonID = null; if (gpdContract.PaymentPeriodID == 0) gpdContract.PaymentPeriodID = null; if (gpdContract.PayerID == 0) gpdContract.PayerID = null; if (gpdContract.PayeeID == 0) gpdContract.PayeeID = null; if (gpdContract.PAccountID == 0) gpdContract.PAccountID = null; if (gpdContract.DepartmentId == 0) gpdContract.DepartmentId = null; ChangeEntityProperties(gpdContract, model, currentUseId.Id); GpdContractDao.SaveAndFlush(gpdContract); model.Id = gpdContract.Id; return true; } catch (Exception ex) { GpdContractDao.RollbackTran(); Log.Error("Error on SaveMissionOrderEditModel:", ex); error = string.Format("Исключение:{0}", ex.GetBaseException().Message); return false; } finally { //SetUserInfoModel(user, model); //SetStaticFields(model, missionHotels); //LoadDictionaries(model); //SetHiddenFields(model); } }
public ActionResult GpdContractEdit(GpdContractEditModel model) { ModelState.Clear(); int StatusID = model.StatusID; if (model.Operation == 1) { model = GpdBl.SetGpdContractEdit(model); return View(model); } if (model.StatusID == 2 || model.StatusID == 4) GpdBl.CheckFillFieldsForGpdContract(model, ModelState); if (ModelState.Count != 0) { model = GpdBl.SetGpdContractEdit(model);//чтобы не пропадали данные model.StatusID = 4; return View(model); } string error; //сохранение договора if (GpdBl.SaveGpdContract(model, out error)) { //model = GpdBl.SetGpdContractEdit(model.Id, model.PersonID, 0, null); string Message = StatusID == 4 ? "Черновик вашего документа сохранен!" : (StatusID == 2 ? "Ваш документ успешно сохранен!" : "Занесение вашего документа отменено!"); //ModelState.AddModelError("errorMessage", Message); //Response.Redirect(Url.Action("GpdContractEdit", "GPD", new { Id = model.Id, PersonID = 0 }));//чтобы не срабатывало нажатие на F5 после сохранения и не множились записи //Session["GpdContractEdit_Post"] = true; return RedirectToAction("GpdContractEdit", "GPD", new { Id = model.Id, PersonID = 0, Msg = Message });//чтобы не срабатывало нажатие на F5 после сохранения и не множились записи //return View(model); } else { if (!string.IsNullOrEmpty(error)) ModelState.AddModelError("errorMessage", error); model = GpdBl.SetGpdContractEdit(model.Id, model.PersonID, 0, null); return View(model); } }
/// <summary> /// Редактируем подчиненную строку (журнал дат пролонгации договоров) /// </summary> /// <param name="entity">Объект договора.</param> /// <param name="model">Модель.</param> /// <param name="UserID">ID пользователя.</param> protected void ChangeEntityProperties(GpdContract entity, GpdContractEditModel model, int UserID) { if (model.DateP == null) return; if (model.DateP.HasValue && model.DatePOld != model.DateP) { //создаем строку для подчиненной таблицы GpdMagProlongation MagProlong = new GpdMagProlongation { //GCID = entity.Id, DateP = model.DateP, CreatorID = UserID, GpdContracts = entity }; entity.MagEntities.Add(MagProlong); } }
/// <summary> /// Определяем права роли текущего пользователя. /// </summary> /// <param name="model"></param> public void GetPermission(GpdContractEditModel model) { UserRole role = CurrentUser.UserRole; model.Permissions = GpdContractDao.GetPermission(role); // if (model.Permissions.Count == 0) { GpdPermissionDto perm = new GpdPermissionDto(); perm.IsCancel = false; perm.IsComment = false; perm.IsCreate = false; perm.IsCreateAct = false; perm.IsDraft = false; perm.IsWrite = false; model.Permissions.Add(perm); } }
/// <summary> /// Создаем список сроков оплаты. /// </summary> /// <param name="model"></param> public void SetGpdPaymentPeriods(GpdContractEditModel model) { UserRole role = CurrentUser.UserRole; model.PaymentPeriods = GpdContractDao.GetPaymentPeriods(); }
/// <summary> /// Проверки при сохранении договора. /// </summary> /// <param name="model"></param> /// <param name="ms"></param> public void CheckFillFieldsForGpdContract(GpdContractEditModel model, System.Web.Mvc.ModelStateDictionary ms) { if (model.StatusID == 4) { if (model.DateBegin == null) ms.AddModelError("DateBegin", "Укажите дату начала действия договора!"); //if (model.DateBegin < DateTime.Today) //&& model.DateBegin.Value.Month != DateTime.Today.Month) // ms.AddModelError("DateBegin", "Дата начала срока действия договора не должна быть меньше текущей!"); if (model.DateEnd == null) ms.AddModelError("DateEnd", "Укажите дату окончания действия договора!"); //if (model.DateEnd < model.DateBegin) // ms.AddModelError("DateEnd", "Дата окончания действия договора должна быть больше, чем дата начала договора!"); } else { if (model.DepartmentId == 0) ms.AddModelError("DepartmentId", "Выберите подразделение!"); else { //проверяем уровень выбранного подразделения if (GpdContractDao.GetDepLevel(model.DepartmentId) != 7) ms.AddModelError("DepartmentId", "Нужно выбрать подразделение седьмого уровня!"); } if (model.PersonID == 0) ms.AddModelError("PersonID", "Выберите физическое лицо из списка!"); if (model.PayerID == 0) ms.AddModelError("PayerID", "Укажите плательщика!"); if (model.PayeeID == 0) ms.AddModelError("PayeeID", "Укажите получателя!"); if (model.CTID == 0) ms.AddModelError("CTID", "Выберите вид начисления из списка!"); if (model.NameContract == null) ms.AddModelError("NameContract", "Заполните поле 'Наименование договора'!"); if (model.NumContract == null) ms.AddModelError("NumContract", "Заполните поле '№ договора'!"); if (model.DateBegin == null) ms.AddModelError("DateBegin", "Укажите дату начала действия договора!"); if (!model.DateP.HasValue) { if (model.DateBegin.HasValue && model.DateBegin.Value.Year < 2014) //временно разрешили вводить договоры задним числом //if (model.DateBegin < DateTime.Today) //&& model.DateBegin.Value.Month != DateTime.Today.Month) ms.AddModelError("DateBegin", "Дата начала срока действия договора не должна быть меньше текущей!"); } if (model.DateEnd == null) ms.AddModelError("DateEnd", "Укажите дату окончания действия договора!"); if (model.DateEnd < model.DateBegin) ms.AddModelError("DateEnd", "Дата окончания действия договора должна быть больше, чем дата начала договора!"); if (model.DateP != null) { if (model.DateP <= model.DateEnd) ms.AddModelError("DateP", "Дата пролонгации должна быть больше даты окончания действия договора!"); } if (model.PaymentPeriodID == 0) ms.AddModelError("PaymentPeriodID", "Укажите срок оплаты!"); //if (model.GPDID == null) // ms.AddModelError("GPDID", "Заполните поле 'ID физического лица (ГПД) в ЭССД'!"); //if (model.GPDContractID == null) // ms.AddModelError("GPDContractID", "Заполните поле 'ID договора с физ. лицом (ГПД) в ЭССД'!"); if (model.PurposePayment == null) ms.AddModelError("PurposePayment", "Заполните поле 'Назначение платежа'!"); if (model.PurposePayment != null) { //если при создании жмут сразу на занести, то формируем поле, которое автоматически формируется, если жать на кнопку черновик if (model.PurposePaymentPart == null) { model.PurposePaymentPart = "Договор ГПХ # " + (model.Account != null && model.Account.Trim().Length != 0 ? model.Account : model.PayeeAccount) + " ## " + GpdContractDao.GetPersonName(model.PersonID) + " *"; } if (model.PurposePaymentPart.Trim().Length + model.PurposePayment.Trim().Length > 210) ms.AddModelError("PurposePayment", "Превышено количество символов!"); } if (model.Amount == 0) ms.AddModelError("Amount", "Сумма не должна быть равна нулю!"); } SetGpdContractEditDropDowns(model); }
/// <summary> /// Создаем список статусов договоров для модели редактирования. /// </summary> /// <param name="model"></param> public void SetGpdContractStatuses(GpdContractEditModel model) { UserRole role = CurrentUser.UserRole; model.Statuses = GpdContractDao.GetStatuses(role, model.StatusID, model.StatusName); }
/// <summary> /// Заполняем выпадающие списки для модели редактирования договоров ГПД. /// </summary> /// <param name="model"></param> public void SetGpdContractEditDropDowns(GpdContractEditModel model) { GetPermission(model); SetGpdContractChargingTypes(model); SetGpdContractStatuses(model); SetGpdPaymentPeriods(model); }
/// <summary> /// Заполняем модель. /// </summary> /// <param name="model">Обрабатываемая модель с частично заполненными полями</param> /// <returns></returns> public GpdContractEditModel SetGpdContractEdit(GpdContractEditModel model) { //модель заполняем частично, если не прошли проверки и чтобы остались введенные пользователем данные model.errorMessage = ""; model.Operation = 0; SetGpdContractEditDropDowns(model); //плательщик if (model.PayerID != 0) { IList<GpdContractDetailDto> Details = GetDetailsAutocomplete(null, model.PayerID); if (Details.Count != 0) { foreach (var doc in Details) { model.PayerName = doc.Name; model.PayerContractor = doc.ContractorName; model.PayerINN = doc.INN; model.PayerKPP = doc.KPP; model.PayerAccount = doc.Account; model.PayerBankName = doc.BankName; model.PayerBankBIK = doc.BankBIK; model.PayerCorrAccount = doc.CorrAccount; } } } //получатель if (model.PayeeID != 0) { IList<GpdContractDetailDto> Details = GetDetailsAutocomplete(null, model.PayeeID); if (Details.Count != 0) { foreach (var doc in Details) { model.PayeeName = doc.Name; model.PayeeContractor = doc.ContractorName; model.PayeeINN = doc.INN; model.PayeeKPP = doc.KPP; model.PayeeAccount = doc.Account; model.PayeeBankName = doc.BankName; model.PayeeBankBIK = doc.BankBIK; model.PayeeCorrAccount = doc.CorrAccount; } } } //лицевой счет if (model.PAccountID != 0) { IList<GpdContractDetailDto> Details = GetDetailsAutocomplete(null, model.PAccountID); if (Details.Count != 0) { foreach (var doc in Details) { model.PersonAccount = doc.LongName; model.Account = doc.PersonAccount; } } } return model; }
/// <summary> /// Заполнение модели для создания/редактирования договора. /// </summary> /// <param name="Id">ID договора.</param> /// <param name="PersonID">ID физического лица</param> /// <param name="DepId">ID подразделения</param> /// <param name="DepName">Название подразделения</param> /// <returns></returns> public GpdContractEditModel SetGpdContractEdit(int Id, int PersonID, int DepId, string DepName) { GpdContractEditModel model = new GpdContractEditModel(); model.Id = Id; model.errorMessage = ""; UserRole role = CurrentUser.UserRole; model.Contracts = GpdContractDao.GetContracts(role, model.Id, model.DepartmentId, model.CTID, null, null, model.Surname, model.NumContract, model.IsFind, model.StatusID, 0, null); if (model.Contracts.Count > 0) { foreach (var doc in model.Contracts) { model.CreatorID = doc.CreatorID; model.DepartmentId = doc.DepartmentId; model.DepartmentName = doc.DepartmentName; model.PersonID = doc.PersonID; model.CTID = doc.CTID; model.StatusID = doc.StatusID; model.NumContract = doc.NumContract; model.NameContract = doc.NameContract; model.DateBegin = doc.DateBegin; model.DateEnd = doc.DateEnd; model.DateP = doc.DateP; model.DatePOld = doc.DatePOld; //плательщик model.PayerID = doc.PayerID; model.PayeeName = doc.PayeeName; model.PayerINN = doc.PayerINN; model.PayerKPP = doc.PayerKPP; model.PayerAccount = doc.PayerAccount; model.PayerBankName = doc.PayerBankName; model.PayerBankBIK = doc.PayerBankBIK; model.PayerCorrAccount = doc.PayerCorrAccount; model.PayerContractor = doc.PayerContractor; //получатель model.PayeeID = doc.PayeeID; model.PayerName = doc.PayerName; model.PayeeINN = doc.PayeeINN; model.PayeeKPP = doc.PayeeKPP; model.PayeeAccount = doc.PayeeAccount; model.PayeeBankName = doc.PayeeBankName; model.PayeeBankBIK = doc.PayeeBankBIK; model.PayeeCorrAccount = doc.PayeeCorrAccount; model.PayeeContractor = doc.PayeeContractor; //лицевой счет model.PAccountID = doc.PAccountID; model.PersonAccount = doc.PersonAccount; model.Account = doc.Account; model.GPDID = doc.GPDID; model.GPDContractID = doc.GPDContractID; model.PurposePayment = doc.PurposePayment; if (doc.CreateDate == null) model.Autor = doc.Autor; else model.Autor = doc.CreatorName + " Дата создания договора " + doc.CreateDate.ToShortDateString() + " - " + doc.CreateDate.ToShortTimeString(); model.CreatorName = doc.CreatorName; model.CreateDate = doc.CreateDate; model.Surname = doc.Surname; model.CTName = doc.CTName; model.StatusName = doc.StatusName; model.PaymentPeriodID = doc.PaymentPeriodID; model.Amount = doc.Amount; //model.DSID = doc.DSID; model.PurposePaymentPart = doc.PurposePaymentPart; model.flgRed = doc.flgRed; model.SendTo1C = doc.SendTo1C; } } else { model.StatusID = 4; model.DepartmentId = DepId; model.DepartmentName = DepName; } SetGpdContractEditDropDowns(model); return model; }
/// <summary> /// Создаем список видов начисления для модели редактирования. /// </summary> /// <param name="model"></param> public void SetGpdContractChargingTypes(GpdContractEditModel model) { UserRole role = CurrentUser.UserRole; model.ChargingTypes = GpdContractDao.GetChargingTypes(role, model.CTID, model.CTName); }