Beispiel #1
0
        /// <summary>
        /// Вычисляет количество период оказания услуги исходя из данных договора
        /// </summary>
        /// <param name="agreement">Договор</param>
        /// <returns></returns>
        public int ComputeTotalPeriods(LeadAgreement agreement)
        {
            var startDate = agreement.Date.Value;
            var endDate   = agreement.EndDate ?? startDate.AddYears(1);

            if (Type == (short)LeadServiceTypes.OneShot)
            {
                return(1);
            }
            var diff      = endDate - startDate;
            int totalDays = (int)diff.TotalDays;
            int result    = 0;

            switch ((LeadServicePeriods)PeriodType)
            {
            case LeadServicePeriods.No:
                result = 1;
                break;

            case LeadServicePeriods.Daily:
                result = totalDays;
                break;

            case LeadServicePeriods.Weekly:
                result = totalDays / 7;
                break;

            case LeadServicePeriods.Montly:
                result = totalDays / 30;
                break;

            case LeadServicePeriods.Quartal:
                result = totalDays / 30 / 3;
                break;

            case LeadServicePeriods.HalfYearly:
                result = totalDays / 30 / 6;
                break;

            case LeadServicePeriods.Yearly:
                result = totalDays / 365;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (result <= 0)
            {
                result = 1;
            }
            return(result);
        }
Beispiel #2
0
 /// <summary>
 /// Вычисляет количество период оказания услуги исходя из данных договора
 /// </summary>
 /// <param name="agreement">Договор</param>
 /// <returns></returns>
 public int ComputeTotalPeriods(LeadAgreement agreement)
 {
     var startDate = agreement.Date.Value;
     var endDate = agreement.EndDate ?? startDate.AddYears(1);
     if (Type == (short) LeadServiceTypes.OneShot)
     {
         return 1;
     }
     var diff = endDate - startDate;
     int totalDays = (int) diff.TotalDays;
     int result = 0;
     switch ((LeadServicePeriods)PeriodType)
     {
         case LeadServicePeriods.No:
             result =  1;
             break;
         case LeadServicePeriods.Daily:
             result = totalDays;
             break;
         case LeadServicePeriods.Weekly:
             result = totalDays/7;
             break;
         case LeadServicePeriods.Montly:
             result = totalDays/30;
             break;
         case LeadServicePeriods.Quartal:
             result = totalDays/30/3;
             break;
         case LeadServicePeriods.HalfYearly:
             result = totalDays/30/6;
             break;
         case LeadServicePeriods.Yearly:
             result = totalDays/365;
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
     if (result <= 0)
     {
         result = 1;
     }
     return result;
 }
        public ActionResult UpdateAgreementInfo(LeadAgreement model, string comments)
        {
            var projects = CurrentUser.IsAdmin() ? DataContext.Projects.Select(p => p.Id) : CurrentUser.ProjectUsers.Select(p => p.ProjectId);
            var agreement = DataContext.LeadAgreements.FirstOrDefault(a => a.Id == model.Id && projects.Contains(a.ProjectId));
            if (agreement == null)
            {
                ShowError("Такой договор не найден");
                return RedirectToAction("Index");
            }

            // Валидируем номер договора - он должен быть уникальным
            var existed =
                agreement.Project.LeadAgreements.Any(
                    a => a.Number.ToLower() == model.Number.ToLower() && a.Id != agreement.Id);
            if (existed)
            {
                ShowError("Договор с таким номером уже есть в системе");
                return RedirectToAction("Info", new {id = agreement.Id});
            }

            // Изменение
            var changement = new LeadAgreementChangement()
            {
                Comments = comments,
                User = CurrentUser,
                LeadAgreement = agreement,
                DateCreated = DateTime.Now
            };
            if (model.Number != agreement.Number)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.Number,
                    NewValue = model.Number,
                    PropertyName = "Номер"
                });
                agreement.Number = model.Number;
            }
            if (model.Date != agreement.Date)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.Date.FormatDate(),
                    NewValue = model.Date.FormatDate(),
                    PropertyName = "Дата заключения"
                });
                agreement.Date = model.Date;
            }
            if (model.EndDate != agreement.EndDate)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.EndDate.FormatDate(),
                    NewValue = model.EndDate.FormatDate(),
                    PropertyName = "Дата завершения действия"
                });
                agreement.EndDate = model.EndDate;
            }
            if (model.EndDate != agreement.EndDate)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.EndDate.FormatDate(),
                    NewValue = model.EndDate.FormatDate(),
                    PropertyName = "Дата завершения действия"
                });
                agreement.EndDate = model.EndDate;
            }
            if (model.Title != agreement.Title)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.Title,
                    NewValue = model.Title,
                    PropertyName = "Название"
                });
                agreement.Title = model.Title;
            }
            if (model.Description != agreement.Description)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = agreement.Description,
                    NewValue = model.Description,
                    PropertyName = "Описание"
                });
                agreement.Description = model.Description;
            }
            if (model.Status != agreement.Status)
            {
                changement.LeadAgreementChangementValues.Add(new LeadAgreementChangementValue()
                {
                    LeadAgreementChangement = changement,
                    OldValue = ((LeadAgreementStatus)agreement.Status).GetEnumMemberName(),
                    NewValue = ((LeadAgreementStatus)model.Status).GetEnumMemberName(),
                    PropertyName = "Статус"
                });
                agreement.Status = model.Status;
            }
            if (changement.LeadAgreementChangementValues.Count > 0)
            {
                agreement.LeadAgreementChangements.Add(changement);
                agreement.DateModified = DateTime.Now;
                DataContext.SubmitChanges();
            }

            ShowSuccess(string.Format("Договор №{0} был успешно сохранен", agreement.Number));

            return RedirectToAction("Info", new {id = agreement.Id});
        }
        public ActionResult Create1Step(string Number, DateTime Date, DateTime? DateEnd, string Title,
            string Description, long ProjectId, long LeadId, Lead model)
        {
            // Ищем или создаем лида, к которому создается заказ
            Lead lead;
            if (LeadId != -1)
            {
                lead = DataContext.Leads.FirstOrDefault(l => l.Id == LeadId);
                if (lead == null)
                {
                    ShowError("Такой лид не найден");
                    return RedirectToAction("Create");
                }
            }
            else
            {
                model.DateCreated = DateTime.Now;
                DataContext.Leads.InsertOnSubmit(model);
                lead = model;
            }

            // Создаем договор
            var agreement = new LeadAgreement()
            {
                Number = Number,
                Date = Date,
                EndDate = DateEnd,
                Title = Title,
                Description = Description,
                ProjectId = ProjectId,
                Lead = lead,
                User = CurrentUser,
                Status = (short) LeadAgreementStatus.Negotiation,
                DateCreated = DateTime.Now
            };
            agreement.LeadAgreementChangements.Add(new LeadAgreementChangement()
            {
                User = CurrentUser,
                LeadAgreement = agreement,
                Comments = "Создание договора пользователем "+CurrentUser.GetFio(),
                DateCreated = DateTime.Now
            });

            DataContext.LeadAgreements.InsertOnSubmit(agreement);
            DataContext.SubmitChanges();

            ShowSuccess(string.Format("Договор №{0} для лида {1} успешно создан", Number, lead.ToString()));

            return RedirectToAction("Info", new {id = agreement.Id});
        }
		private void detach_LeadAgreements(LeadAgreement entity)
		{
			this.SendPropertyChanging();
			entity.User = null;
		}
		private void attach_LeadAgreements(LeadAgreement entity)
		{
			this.SendPropertyChanging();
			entity.Project = this;
		}