public static IEnumerable<WorkType> GetList() { //SqlParameter pIdAdmin = new SqlParameter() { ParameterName = "id_admin", SqlValue = idAdmin, SqlDbType = SqlDbType.Int }; var dt = Db.Service.ExecuteQueryStoredProcedure("get_work_type_list"); var lst = new List<WorkType>(); foreach (DataRow row in dt.Rows) { var model = new WorkType(row); lst.Add(model); } return lst; }
private void FillSelf(DataRow row, bool fillObj = false, bool fillNames = false) { Id = Db.DbHelper.GetValueIntOrDefault(row, "id"); IdClaim = Db.DbHelper.GetValueIntOrDefault(row, "id_claim"); IdClaim2ClaimState = Db.DbHelper.GetValueIntOrDefault(row, "id_claim2claim_state"); ProcessEnabled = Db.DbHelper.GetValueBool(row, "process_enabled"); DeviceEnabled = Db.DbHelper.GetValueBool(row, "device_enabled"); ZipClaim = Db.DbHelper.GetValueBoolOrNull(row, "zip_claim"); ZipClaimNumber = Db.DbHelper.GetValueString(row, "zip_claim_number"); CounterMono = Db.DbHelper.GetValueIntOrNull(row, "counter_mono"); CounterColor = Db.DbHelper.GetValueIntOrNull(row, "counter_color"); CounterTotal = Db.DbHelper.GetValueIntOrNull(row, "counter_total"); NoCounter = Db.DbHelper.GetValueBoolOrNull(row, "no_counter"); Descr = Db.DbHelper.GetValueString(row, "descr"); CounterUnavailable = Db.DbHelper.GetValueBoolOrNull(row, "counter_unavailable"); CounterDescr = Db.DbHelper.GetValueString(row, "counter_descr"); CreatorSid = Db.DbHelper.GetValueString(row, "creator_sid"); EngeneerSid = Db.DbHelper.GetValueString(row, "engeneer_sid"); AdminSid = Db.DbHelper.GetValueString(row, "admin_sid"); DeviceId = Db.DbHelper.GetValueIntOrDefault(row, "id_device"); WorkTypeId = Db.DbHelper.GetValueIntOrDefault(row, "id_work_type"); TimeOnWorkMinutes = Db.DbHelper.GetValueIntOrNull(row, "time_on_work_minutes"); ClientSdNum = Db.DbHelper.GetValueString(row, "client_sd_num"); DateCreate = Db.DbHelper.GetValueDateTimeOrDefault(row, "date_create"); if (fillNames) { Admin = new EmployeeSm(AdminSid); Engeneer = new EmployeeSm(EngeneerSid); Creator = new EmployeeSm(CreatorSid); } if (fillObj) { Device = new Device(DeviceId); WorkType = new WorkType(WorkTypeId); DeviceClassifierCaterory = new ClassifierCaterory(Device.ClassifierCategoryId); } }
/// <summary> /// Перевод заявки на следующую стадию /// </summary> /// <param name="confirm">Подтвердить или отклонить назначение заявки</param> public void Go(bool confirm = true) { if (Id <= 0) throw new ArgumentException("Невозможно предать заявку. Не указан ID заявки."); //Save(); string descr = Empty; var currState = GetClaimCurrentState(Id); var nextState = new ClaimState(); bool saveStateInfo = true; bool sendNote = false; ServiceRole[] noteTo = { ServiceRole.CurSpecialist }; string noteText = Empty; string noteSubject = Empty; bool goNext = false; bool saveClaim = false;//Метод вызывается из удаленных программ и поэтому не всегда нухно схранять статус //ReFillSelf(true); if (currState.SysName.ToUpper().Equals("NEW")) { goNext = true; saveClaim = true; int? wtId = null; if (!IdWorkType.HasValue) { wtId = new Claim(Id).IdWorkType; if (!wtId.HasValue) throw new ArgumentException( "Невозможно определить следующий статус. Тип работ заявки не указан."); } else { wtId = IdWorkType; } var wtSysName = new WorkType(wtId.Value).SysName; descr = $"{Descr}\r\nУстановлен тип работ {wtSysName}\r\nНазначен специалист {AdHelper.GetUserBySid(SpecialistSid).FullName}"; switch (wtSysName) { case "ДНО": case "НПР": case "ТЭО": case "УТЗ": nextState = new ClaimState("TECHSET"); CurTechSid = SpecialistSid; break; case "РТО": case "МТС": case "УРМ": case "ЗРМ": case "МДО": case "ИПТ": case "РЗРД": case "ЗНЗЧ": nextState = new ClaimState("SERVADMSET"); CurAdminSid = SpecialistSid; break; } sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } else if (currState.SysName.ToUpper().Equals("TECHSET")) { goNext = true; saveClaim = true; if (confirm) { nextState = new ClaimState("TECHWORK"); CurTechSid = CurUserAdSid; SpecialistSid = CurUserAdSid; } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("SERVADMSETWAIT"); //Очищаем выбранного специалиста так как статус заявки поменялся Clear(specialist: true, tech: true); //sendNote = true; //noteTo = new[] { ServiceRole.CurAdmin }; //noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; //noteSubject = $"[Заявка №%ID%] Отклонено назначение СТП"; } } else if (currState.SysName.ToUpper().Equals("TECHWORK")) { goNext = true; saveClaim = true; if (confirm) { ServiceSheet4Save.IdClaim = Id; if (ServiceSheet4Save == null || ServiceSheet4Save.IdClaim == 0) { throw new ArgumentException("Сервисный лист отсутствует. Операция не завершена!"); } ////if (!ServiceSheet4Save.NoTechWork) ////{ ServiceSheet4Save.CurUserAdSid = CurUserAdSid; ServiceSheet4Save.EngeneerSid = CurUserAdSid; ServiceSheet4Save.IdServiceIssue = -999; ServiceSheet4Save.Save("TECHWORK"); if (ServiceSheet4Save.ProcessEnabled && ServiceSheet4Save.DeviceEnabled) { nextState = new ClaimState("TECHDONE"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("DONE"); //Если есть хоть один не установленный ЗИП if (GetOrderedZipItemList(Id, ServiceSheet4Save.Id).Any(x => !x.Installed)) { nextState = new ClaimState("SERVADMSETWAIT"); } } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && ServiceSheet4Save.ZipClaim.HasValue && ServiceSheet4Save.ZipClaim.Value) { //nextState = new ClaimState("TECHDONE"); ////Сначала сохраняем промежуточный статус //SaveStateStep(nextState.Id); saveStateInfo = false; //nextState = new ClaimState("ZIPORDER"); nextState = new ClaimState("ZIPISSUE"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && (!ServiceSheet4Save.ZipClaim.HasValue || !ServiceSheet4Save.ZipClaim.Value)) { nextState = new ClaimState("TECHPROCESSED"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("SERVADMSETWAIT"); } } else { descr = $"{Descr}"; nextState = new ClaimState("TECHNOCONTACT"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id, descr); saveStateInfo = false; nextState = new ClaimState("SERVADMSETWAIT"); Clear(specialist: true); } ////} ////else if (ServiceSheet4Save.NoTechWork) ////{ //// nextState = new ClaimState("NEW"); //// //Очищаем выбранного специалиста так как статус заявки поменялся //// Clear(specialist: true); ////} } else if (currState.SysName.ToUpper().Equals("SERVADMSETWAIT")) { goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } else if (currState.SysName.ToUpper().Equals("SERVADMSET")) { goNext = true; if (confirm) { nextState = new ClaimState("SRVADMWORK"); CurAdminSid = CurUserAdSid; SpecialistSid = CurUserAdSid; } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("SERVADMSETWAIT"); //Очищаем выбранного специалиста так как статус заявки поменялся Clear(specialist: true, admin: true); sendNote = true; noteTo = new[] { ServiceRole.CurManager }; noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Отклонено назначение СА"; } } else if (currState.SysName.ToUpper().Equals("SRVADMWORK")) { goNext = true; saveClaim = true; ServiceIssue4Save.IdClaim = Id; ServiceIssue4Save.Descr = Descr; ServiceIssue4Save.SpecialistSid = SpecialistSid; ServiceIssue4Save.CurUserAdSid = CurUserAdSid; int serviceIssueId = ServiceIssue4Save.Save(); CurServiceIssueId = serviceIssueId; //Устанавливает текущий заявку на выезд WorkType wt = new WorkType(); if (IdWorkType.HasValue) wt = new WorkType(IdWorkType.Value); descr = $"Установлен тип работ {wt.Name}\r\nНазначен специалист {AdHelper.GetUserBySid(SpecialistSid).FullName}\r\nДата выезда {ServiceIssue4Save.DatePlan:dd.MM.yyyy}\r\n{Descr}"; nextState = new ClaimState("SRVENGSET"); CurEngeneerSid = SpecialistSid; sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } else if (currState.SysName.ToUpper().Equals("SERVENGSETWAIT")) { goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGSET"); } else if (currState.SysName.ToUpper().Equals("SRVENGSET")) { goNext = true; saveClaim = true; if (confirm) { nextState = new ClaimState("SRVENGGET"); //Сначала сохраняем промежуточный статус //SaveStateStep(nextState.Id); saveStateInfo = false; //nextState = new ClaimState("SERVENGOUTWAIT"); CurEngeneerSid = CurUserAdSid; SpecialistSid = CurUserAdSid; } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("SRVENGCANCEL"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id, descr); saveStateInfo = false; nextState = new ClaimState("SRVADMWORK"); Clear(specialist: true, engeneer: true); sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Отклонено назначение СИ"; } } else if (currState.SysName.ToUpper().Equals("SRVENGGET")) { goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGWENT"); } else if (currState.SysName.ToUpper().Equals("SRVENGWENT")) { goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGWORK"); } else if (currState.SysName.ToUpper().Equals("SRVENGWORK")) { goNext = true; saveClaim = true; ServiceSheet4Save.IdClaim = Id; if (ServiceSheet4Save == null || ServiceSheet4Save.IdClaim == 0) { throw new ArgumentException("Сервисный лист отсутствует. Операция не завершена!"); } var cl = new Claim(Id); if (IsNullOrEmpty(ServiceSheet4Save.CurUserAdSid)) ServiceSheet4Save.CurUserAdSid = CurUserAdSid; if (IsNullOrEmpty(ServiceSheet4Save.EngeneerSid)) ServiceSheet4Save.EngeneerSid = CurUserAdSid; ServiceSheet4Save.AdminSid = cl.CurAdminSid; ServiceSheet4Save.IdServiceIssue = cl.CurServiceIssueId ?? -1; ServiceSheet4Save.Save("SRVENGWORK"); bool hasNotInstalled = GetOrderedZipItemList(Id, ServiceSheet4Save.Id).Any(x => !x.Installed); if (ServiceSheet4Save.ProcessEnabled && ServiceSheet4Save.DeviceEnabled) { //Если есть хоть один не установленный ЗИП if (hasNotInstalled) { nextState = new ClaimState("ZIPISSUE"); } else { nextState = new ClaimState("DONE"); } } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && ServiceSheet4Save.ZipClaim.HasValue && ServiceSheet4Save.ZipClaim.Value) { nextState = new ClaimState("ZIPISSUE"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && (!ServiceSheet4Save.ZipClaim.HasValue || !ServiceSheet4Save.ZipClaim.Value)) { //Если есть хоть один не установленный ЗИП if (hasNotInstalled) { nextState = new ClaimState("ZIPISSUE"); } else { nextState = new ClaimState("SERVADMSET"); SpecialistSid = CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Инженер не восстановил работу аппарата по заявке №%ID% %LINK%.\r\Комментарий:{ ServiceSheet4Save.Descr}"; noteSubject = $"[Заявка №%ID%] Работа не восстановлена"; } } } else if (currState.SysName.ToUpper().Equals("ZIPISSUE")) { var lastServiceSheet = GetLastServiceSheet(); var curCl = new Claim(Id); goNext = true; saveClaim = true; var notInstalledList = GetOrderedZipItemList(Id, lastServiceSheet.Id).Where(x => !x.Installed); //Если есть заказаный ЗИП то значит заявку надо продолжить if (lastServiceSheet.ZipClaim.HasValue && lastServiceSheet.ZipClaim.Value) { if (!lastServiceSheet.GetIssuedZipItemList().Any()) { throw new Exception("Необходимо заполнить список ЗИП. Сервисный лист не был передан."); } else { ServiceSheetZipItem.SaveOrderedZipItemsCopyFromIssued(lastServiceSheet.Id, CurUserAdSid); if (notInstalledList.Any()) //Если есть не установленный ЗИП то сохраняем его { ServiceSheetZipItem.NotInstalledSaveList(notInstalledList.Select(x => x.Id).ToArray(), lastServiceSheet.Id, CurUserAdSid); } SpecialistSid = CurUserAdSid; nextState = new ClaimState("ZIPCHECK"); if (nextState.SysName.Equals("ZIPCHECK")) { sendNote = true; noteTo = new[] {ServiceRole.AllTech}; noteText = $@"Необходимо заказать ЗИП по заявке №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Необходимо заказать ЗИП"; } } } else { if (notInstalledList.Any()) //Если есть не установленный ЗИП { ServiceSheetZipItem.NotInstalledSaveList(notInstalledList.Select(x=>x.Id).ToArray(), lastServiceSheet.Id, CurUserAdSid); Descr = $"Не весь ЗИП установлен"; if (lastServiceSheet.ProcessEnabled && lastServiceSheet.DeviceEnabled) { nextState = new ClaimState("DONE"); } else { nextState = new ClaimState("SERVADMSET"); } SpecialistSid = curCl.CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Не весь ЗИП установлен №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Не весь ЗИП установлен"; } else { nextState = new ClaimState("DONE"); sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"ЗИП Установлен по заявке №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] ЗИП установлен"; } } } else if (currState.SysName.ToUpper().Equals("ZIPCHECK")) { //В настоящий момент по этому статусу происходит заказ ЗИП специалистом Тех поддержки if (!GetClaimCurrentState(Id).SysName.Equals("ZIPCHECKINWORK")) //На всякий случай проверяем еще раз { goNext = true; saveClaim = true; CurTechSid = CurUserAdSid; SpecialistSid = CurUserAdSid; nextState = new ClaimState("ZIPCHECKINWORK"); } else { throw new ArgumentException("Проверка ЗИП уже в работе."); } } else if (currState.SysName.ToUpper().Equals("ZIPCHECKINWORK")) { var curCl = new Claim(Id); if (curCl.SpecialistSid != CurUserAdSid && curCl.CurTechSid != CurUserAdSid) throw new ArgumentException("Проверка ЗИП уже в работе."); goNext = true; saveClaim = true; //Если красная линия или Гарантийный аппарат то на утверждение if (curCl.Contract.ContractZipTypeSysName == "LESSZIP" || (curCl.Device.HasGuarantee.HasValue && curCl.Device.HasGuarantee.Value)) { nextState = new ClaimState("ZIPCONFIRM"); } else { ZipClaim.CreateClaimUnitWork(Id, CurUserAdSid); nextState = new ClaimState("ZIPORDERED"); sendNote = true; noteTo = new[] { ServiceRole.ZipConfirm }; noteText = $@"Необходимо утвердить список ЗИП в заявке №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Утверждение список ЗИП"; } } else if (currState.SysName.ToUpper().Equals("ZIPCONFIRM")) { goNext = true; saveClaim = true; if (confirm) { ZipClaim.CreateClaimUnitWork(Id, CurUserAdSid); nextState = new ClaimState("ZIPORDERED"); } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("ZIPCONFIRMCANCEL"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id, descr); saveStateInfo = false; nextState = new ClaimState("ZIPCHECKINWORK"); sendNote = true; noteTo = new[] { ServiceRole.CurTech }; noteText = $@"Отклонен список ЗИП в заявке №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Отклонен список ЗИП"; } } else if (currState.SysName.ToUpper().Equals("ZIPORDERED")) { goNext = true; saveClaim = true; if (!confirm) { descr = $"Отказ в закупке ЗИП\r\n{Descr}"; nextState = new ClaimState("ZIPBUYCANCEL"); sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Отказ в закупке ЗИП №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Отказ в закупке ЗИП"; } else { nextState = new ClaimState("SERVADMSET"); var curCl = new Claim(Id, false); SpecialistSid = curCl.CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } } else if (currState.SysName.ToUpper().Equals("DONE")) { //Если есть незакрытые СЛ то заявку не закрываем if (!GetClaimServiceSheetList(Id, false).Any()) { goNext = true; saveClaim = true; nextState = new ClaimState("END"); sendNote = true; noteTo = new[] {ServiceRole.CurManager}; noteText = $@"Заявка №%ID% закрыта %LINK%"; noteSubject = $"[Заявка №%ID%] Заявка закрыта"; } } else if (currState.SysName.ToUpper().Equals("ZIPCL-CANCELED")) { goNext = true; saveClaim = true; descr = Descr; nextState = new ClaimState("ZIPBUYCANCEL"); } else if (currState.SysName.ToUpper().Equals("ZIPCL-ETPREP-GET") || currState.SysName.ToUpper().Equals("ZIPCL-ETSHIP-GET")) { goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); var curCl = new Claim(Id, false); SpecialistSid = curCl.CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } else if (currState.SysName.ToUpper().Equals("ZIPCL-DELIV")) { goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); SpecialistSid = CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"[Заявка №%ID%] Вам назначена заявка"; } else { nextState = currState; } if (saveClaim) Save(); if (goNext) SaveStateStep(nextState.Id, descr, saveStateInfo); //SaveStateStep(nextState.Id); if (sendNote) { SendNote(noteSubject, noteText, null, noteTo); ////Замена по маске //noteSubject = noteSubject.Replace("%ID%", Id.ToString()); //noteText = noteText.Replace("%ID%", Id.ToString()); //string link = $"{ConfigurationManager.AppSettings["ServiceUrl"]}/Claim/Index/{Id}"; //noteText = noteText.Replace("%LINK%", $@"<p><a href=""{link}"">{link}</a></p>"); //SendMailTo(noteText, noteSubject, noteTo); } }
private void FillSelf(DataRow row, bool loadObj = true, bool loadNames = false) { Sid = Db.DbHelper.GetValueString(row, "sid"); Id = Db.DbHelper.GetValueIntOrDefault(row, "id"); IdContractor = Db.DbHelper.GetValueIntOrDefault(row, "id_contractor"); IdContract = Db.DbHelper.GetValueIntOrDefault(row, "id_contract"); IdDevice = Db.DbHelper.GetValueIntOrDefault(row, "id_device"); ContractorName = Db.DbHelper.GetValueString(row, "contractor_name"); ContractName = Db.DbHelper.GetValueString(row, "contract_name"); DeviceName = Db.DbHelper.GetValueString(row, "device_name"); IdWorkType = Db.DbHelper.GetValueIntOrNull(row, "id_work_type"); SpecialistSid = Db.DbHelper.GetValueString(row, "specialist_sid"); DateCreate = Db.DbHelper.GetValueDateTimeOrDefault(row, "date_create"); DateStateChange = Db.DbHelper.GetValueDateTimeOrDefault(row, "date_state_change"); ClientSdNum = Db.DbHelper.GetValueString(row, "client_sd_num"); ChangerSid = Db.DbHelper.GetValueString(row, "changer_sid"); CurEngeneerSid = Db.DbHelper.GetValueString(row, "cur_engeneer_sid"); CurAdminSid = Db.DbHelper.GetValueString(row, "cur_admin_sid"); CurTechSid = Db.DbHelper.GetValueString(row, "cur_tech_sid"); CurManagerSid = Db.DbHelper.GetValueString(row, "cur_manager_sid"); CurServiceIssueId = Db.DbHelper.GetValueIntOrNull(row, "cur_service_issue_id"); IdServiceCame = Db.DbHelper.GetValueIntOrNull(row, "id_service_came"); IdState = Db.DbHelper.GetValueIntOrDefault(row, "id_claim_state"); Contractor = new Contractor() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_contractor"), Name = Db.DbHelper.GetValueString(row, "contractor_name"), FullName = Db.DbHelper.GetValueString(row, "contractor_full_name") }; Contract = new Contract() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_contract"), Number = Db.DbHelper.GetValueString(row, "contract_num") }; Device = new Device() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_device"), FullName = Db.DbHelper.GetValueString(row, "device_name"), SerialNum = Db.DbHelper.GetValueString(row, "device_serial_num"), ObjectName = Db.DbHelper.GetValueString(row, "object_name"), Address = Db.DbHelper.GetValueString(row, "address"), ContactName = Db.DbHelper.GetValueString(row, "contact_name"), Descr = Db.DbHelper.GetValueString(row, "c2d_comment"), CityName = Db.DbHelper.GetValueString(row, "city_name") }; Manager = new EmployeeSm() { AdSid = CurManagerSid , DisplayName = Db.DbHelper.GetValueString(row, "manager_name") }; Admin = new EmployeeSm() { AdSid = CurAdminSid, DisplayName = Db.DbHelper.GetValueString(row, "admin_name") }; Tech = new EmployeeSm() { AdSid = CurTechSid, DisplayName = Db.DbHelper.GetValueString(row, "tech_name") }; Engeneer = new EmployeeSm() { AdSid = CurEngeneerSid, DisplayName = Db.DbHelper.GetValueString(row, "engeneer_name") }; Specialist = new EmployeeSm() { AdSid = SpecialistSid, DisplayName = Db.DbHelper.GetValueString(row, "specialist_name") }; Changer = new EmployeeSm() { AdSid = ChangerSid, DisplayName = Db.DbHelper.GetValueString(row, "specialist_name") }; if (IdWorkType.HasValue && IdWorkType.Value > 0) WorkType = new WorkType() {Id= IdWorkType.Value, Name = Db.DbHelper.GetValueString(row, "work_type_name"), SysName = Db.DbHelper.GetValueString(row, "work_type_sys_name"), ZipInstall = Db.DbHelper.GetValueBool(row, "work_type_zip_install"), ZipOrder = Db.DbHelper.GetValueBool(row, "work_type_zip_order") }; State = new ClaimState() {Id=IdState, Name = Db.DbHelper.GetValueString(row, "claim_state_name"), SysName = Db.DbHelper.GetValueString(row, "claim_state_sys_name"), BackgroundColor = Db.DbHelper.GetValueString(row, "claim_state_background_color"), ForegroundColor = Db.DbHelper.GetValueString(row, "claim_state_foreground_color") }; if (loadObj) { Contractor = new Contractor(Contractor.Id); Contract = new Contract(Contract.Id); Device = new Device(Device.Id, Contract.Id); if (IdWorkType.HasValue && IdWorkType.Value > 0) WorkType = new WorkType(IdWorkType.Value); State = new ClaimState(Db.DbHelper.GetValueIntOrDefault(row, "id_claim_state")); } if (loadNames) { Manager = new EmployeeSm(CurManagerSid); Admin = new EmployeeSm(CurAdminSid); Tech = new EmployeeSm(CurTechSid); Engeneer = new EmployeeSm(CurEngeneerSid); Specialist = new EmployeeSm(SpecialistSid); Changer = new EmployeeSm(ChangerSid); } }
/// <summary> /// Список доступных для назначения специалистов для заявки в текущем статусе /// </summary> /// <param name="id"></param> /// <returns></returns> public static IEnumerable<KeyValuePair<string, string>> GetSpecialistList(int idClaim) { var list = new List<KeyValuePair<string, string>>(); var state = GetClaimCurrentState(idClaim); switch (state.SysName) { case "NEWADD": var wtId = new Claim(idClaim).IdWorkType; if (!wtId.HasValue) throw new ArgumentException("Невозможно выбрать список специалистов. Тип работ не указан."); var wtSysName = new WorkType(wtId.Value).SysName; switch (wtSysName) { case "ДНО": case "НПР": case "ТЭО": case "УТЗ": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceTech).ToList(); break; case "РТО": case "МТС": case "УРМ": case "ЗРМ": case "МДО": case "ИПТ": case "РЗРД": case "ЗНЗЧ": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceAdmin).ToList(); break; } break; case "SERVADMSETWAIT": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceAdmin).ToList(); break; case "SERVENGSETWAIT": case "SRVADMWORK": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceEngeneer).ToList(); break; } return list; }
public static IEnumerable<KeyValuePair<string, string>> GetWorkTypeSpecialistSelectionList(int idWorkType) { var list = new List<KeyValuePair<string, string>>(); var wtSysName = new WorkType(idWorkType).SysName; switch (wtSysName) { case "ДНО": case "НПР": case "ТЭО": case "УТЗ": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceTech).ToList(); break; case "РТО": case "МТС": case "УРМ": case "ЗРМ": case "МДО": case "ИПТ": case "РЗРД": case "ЗНЗЧ": list = AdHelper.GetUserListByAdGroup(AdGroup.ServiceAdmin).ToList(); break; } return list; }
/// <summary> /// Перевод заявки на следующую стадию /// </summary> /// <param name="confirm">Подтвердить или отклонить назначение заявки</param> public void Go(bool confirm = true) { if (Id <= 0) throw new ArgumentException("Невозможно предать заявку. Не указан ID заявки."); //Save(); string descr = Empty; var currState = GetClaimCurrentState(Id); var nextState = new ClaimState(); bool saveStateInfo = true; bool sendNote = false; ServiceRole[] noteTo = { ServiceRole.CurSpecialist }; string noteText = Empty; string noteSubject = Empty; bool goNext = false; bool saveClaim = false;//Метод вызывается из удаленных программ и поэтому не всегда нухно схранять статус switch (currState.SysName.ToUpper())//Текущий статус { //case "NEW": // nextState = new ClaimState("NEWADD"); // break; case "NEW": goNext = true; saveClaim = true; int? wtId = null; if (!IdWorkType.HasValue) { wtId = new Claim(Id).IdWorkType; if (!wtId.HasValue) throw new ArgumentException("Невозможно определить следующий статус. Тип работ заявки не указан."); } else { wtId = IdWorkType; } var wtSysName = new WorkType(wtId.Value).SysName; descr = $"{Descr}\r\nУстановлен тип работ {wtSysName}\r\nНазначен специалист {AdHelper.GetUserBySid(SpecialistSid).FullName}"; switch (wtSysName) { case "ДНО": case "НПР": case "ТЭО": case "УТЗ": nextState = new ClaimState("TECHSET"); CurTechSid = SpecialistSid; break; case "РТО": case "МТС": case "УРМ": case "ЗРМ": case "МДО": case "ИПТ": case "РЗРД": case "ЗНЗЧ": nextState = new ClaimState("SERVADMSET"); CurAdminSid = SpecialistSid; break; } sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"Назначена заявка №%ID%"; break; case "TECHSET": goNext = true; saveClaim = true; if (confirm) { nextState = new ClaimState("TECHWORK"); } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("NEW"); //Очищаем выбранного специалиста так как статус заявки поменялся Clear(specialist: true, workType: true, tech: true); sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; noteSubject = $"Отклонено назначение заявки №%ID%"; } break; case "TECHWORK": goNext = true; saveClaim = true; if (confirm) { ServiceSheet4Save.IdClaim = Id; if (ServiceSheet4Save == null || ServiceSheet4Save.IdClaim == 0) { throw new ArgumentException("Сервисный лист отсутствует. Операция не завершена!"); } ////if (!ServiceSheet4Save.NoTechWork) ////{ ServiceSheet4Save.CurUserAdSid = CurUserAdSid; ServiceSheet4Save.EngeneerSid = CurUserAdSid; ServiceSheet4Save.IdServiceIssue = -999; ServiceSheet4Save.Save("TECHWORK"); if (ServiceSheet4Save.ProcessEnabled && ServiceSheet4Save.DeviceEnabled) { nextState = new ClaimState("TECHDONE"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("DONE"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && ServiceSheet4Save.ZipClaim.HasValue && ServiceSheet4Save.ZipClaim.Value) { nextState = new ClaimState("TECHPROCESSED"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("ZIPORDER"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && (!ServiceSheet4Save.ZipClaim.HasValue || !ServiceSheet4Save.ZipClaim.Value)) { nextState = new ClaimState("TECHNODONE"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("SERVADMSETWAIT"); } } else { descr = $"{Descr}"; nextState = new ClaimState("TECHNOCONTACT"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id, descr); saveStateInfo = false; nextState = new ClaimState("SERVADMSETWAIT"); Clear(specialist: true); } ////} ////else if (ServiceSheet4Save.NoTechWork) ////{ //// nextState = new ClaimState("NEW"); //// //Очищаем выбранного специалиста так как статус заявки поменялся //// Clear(specialist: true); ////} break; case "SERVADMSETWAIT": goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"Назначена заявка №%ID%"; break; case "SERVADMSET": goNext = true; if (confirm) { nextState = new ClaimState("SRVADMWORK"); CurAdminSid = SpecialistSid; } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("NEW"); //Очищаем выбранного специалиста так как статус заявки поменялся Clear(specialist: true, admin: true); sendNote = true; noteTo = new[] { ServiceRole.CurManager }; noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; noteSubject = $"Отклонено назначение заявки №%ID%"; } break; case "SRVADMWORK": goNext = true; saveClaim = true; ServiceIssue4Save.IdClaim = Id; ServiceIssue4Save.Descr = Descr; ServiceIssue4Save.SpecialistSid = SpecialistSid; ServiceIssue4Save.CurUserAdSid = CurUserAdSid; int serviceIssueId = ServiceIssue4Save.Save(); CurServiceIssueId = serviceIssueId;//Устанавливает текущий заявку на выезд descr = $"Назначен специалист {AdHelper.GetUserBySid(SpecialistSid).FullName}\r\nДата выезда {ServiceIssue4Save.DatePlan:dd.MM.yyyy}\r\n{Descr}"; nextState = new ClaimState("SRVENGSET"); CurEngeneerSid = SpecialistSid; sendNote = true; noteTo = new[] { ServiceRole.CurSpecialist }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"Назначена заявка №%ID%"; break; case "SERVENGSETWAIT": goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGSET"); break; case "SRVENGSET": goNext = true; saveClaim = true; if (confirm) { nextState = new ClaimState("SRVENGGET"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("SERVENGOUTWAIT"); } else { descr = $"Отклонено\r\n{Descr}"; nextState = new ClaimState("SRVENGCANCEL"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id, descr); saveStateInfo = false; nextState = new ClaimState("SRVADMWORK"); Clear(specialist: true, engeneer: true); sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Отклонено назначение заявки №%ID% %LINK%"; noteSubject = $"Отклонено назначение заявки №%ID%"; } break; case "SERVENGOUTWAIT": goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGWENT"); break; case "SRVENGWENT": goNext = true; saveClaim = true; nextState = new ClaimState("SRVENGWORK"); break; case "SRVENGWORK": goNext = true; saveClaim = true; ServiceSheet4Save.IdClaim = Id; if (ServiceSheet4Save == null || ServiceSheet4Save.IdClaim == 0) { throw new ArgumentException("Сервисный лист отсутствует. Операция не завершена!"); } var cl = new Claim(Id); if (IsNullOrEmpty(ServiceSheet4Save.CurUserAdSid)) ServiceSheet4Save.CurUserAdSid = CurUserAdSid; if (IsNullOrEmpty(ServiceSheet4Save.EngeneerSid))ServiceSheet4Save.EngeneerSid = CurUserAdSid; ServiceSheet4Save.IdServiceIssue = cl.CurServiceIssueId ?? -1; ServiceSheet4Save.Save("SRVENGWORK"); if (ServiceSheet4Save.ProcessEnabled && ServiceSheet4Save.DeviceEnabled) { nextState = new ClaimState("DONE"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && ServiceSheet4Save.ZipClaim.HasValue && ServiceSheet4Save.ZipClaim.Value) { nextState = new ClaimState("ZIPISSUE"); } else if ((!ServiceSheet4Save.ProcessEnabled || !ServiceSheet4Save.DeviceEnabled) && (!ServiceSheet4Save.ZipClaim.HasValue || !ServiceSheet4Save.ZipClaim.Value)) { nextState = new ClaimState("ZIPISSUE"); } break; case "ZIPISSUE": if (!GetLastServiceSheet().GetZipItemList().Any()) throw new Exception("Необходимо заполнить список ЗИП. Сервисный лист не был передан."); goNext = true; saveClaim = true; SpecialistSid = CurUserAdSid; nextState = new ClaimState("ZIPORDER"); if (nextState.SysName.Equals("ZIPORDER")) { sendNote = true; noteTo = new[] { ServiceRole.AllTech }; noteText = $@"Необходимо заказать ЗИП по заявке №%ID% %LINK%"; noteSubject = $"Необходимо заказать ЗИП по заявке №%ID%"; } break; case "ZIPORDER"://В настоящий момент по этому статусу происходит заказ ЗИП специалистом Тех поддержки if (!GetClaimCurrentState(Id).SysName.Equals("ZIPCLINWORK"))//На всякий случай проверяем еще раз { goNext = true; saveClaim = true; CurTechSid = CurUserAdSid; SpecialistSid = CurUserAdSid; nextState = new ClaimState("ZIPCLINWORK"); } else { throw new ArgumentException("Заказ уже в работе."); } break; case "ZIPCLINWORK": var curCl = new Claim(Id); if (curCl.SpecialistSid != CurUserAdSid && curCl.CurTechSid != CurUserAdSid) throw new ArgumentException("Заказ уже в работе."); break; case "ZIPCHECK": goNext = true; saveClaim = true; nextState = new ClaimState("ZIPCHECKED"); break; case "ZIPCHECKED": goNext = true; saveClaim = true; nextState = new ClaimState("ZIPCONFIRMED"); break; case "ZIPCONFIRMED": goNext = true; saveClaim = true; nextState = new ClaimState("ZIPORDERED"); break; case "ZIPORDERED": goNext = true; saveClaim = true; if (!confirm) { nextState = new ClaimState("ZIPBUYCANCEL"); break; } else { nextState = new ClaimState("ZIPINSTWAIT"); //Сначала сохраняем промежуточный статус SaveStateStep(nextState.Id); saveStateInfo = false; nextState = new ClaimState("SERVENGSETWAIT"); break; } case "DONE": goNext = true; saveClaim = true; nextState = new ClaimState("END"); sendNote = true; noteTo = new[] { ServiceRole.CurManager }; noteText = $@"Заявка №%ID% закрыта %LINK%"; noteSubject = $"Заявка №%ID% закрыта"; break; case "ZIPCL-CANCELED": goNext = true; saveClaim = true; descr = Descr; nextState = new ClaimState("ZIPBUYCANCEL"); break; case "ZIPCL-ETPREP-GET": case "ZIPCL-ETSHIP-GET": goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); SpecialistSid = CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"Назначена заявка №%ID%"; break; case "ZIPCL-DELIV": goNext = true; saveClaim = true; nextState = new ClaimState("SERVADMSET"); SpecialistSid = CurAdminSid; sendNote = true; noteTo = new[] { ServiceRole.CurAdmin }; noteText = $@"Вам назначена заявка №%ID% %LINK%"; noteSubject = $"Назначена заявка №%ID%"; break; default: nextState = currState; break; } if (saveClaim) Save(); if (goNext)SaveStateStep(nextState.Id, descr, saveStateInfo); //SaveStateStep(nextState.Id); if (sendNote) { SendNote(noteSubject, noteText, noteTo); ////Замена по маске //noteSubject = noteSubject.Replace("%ID%", Id.ToString()); //noteText = noteText.Replace("%ID%", Id.ToString()); //string link = $"{ConfigurationManager.AppSettings["ServiceUrl"]}/Claim/Index/{Id}"; //noteText = noteText.Replace("%LINK%", $@"<p><a href=""{link}"">{link}</a></p>"); //SendMailTo(noteText, noteSubject, noteTo); } }
private void FillSelf(DataRow row, bool loadObj = true) { Sid = Db.DbHelper.GetValueString(row, "sid"); Id = Db.DbHelper.GetValueIntOrDefault(row, "id"); IdContractor = Db.DbHelper.GetValueIntOrDefault(row, "id_contractor"); IdContract = Db.DbHelper.GetValueIntOrDefault(row, "id_contract"); IdDevice = Db.DbHelper.GetValueIntOrDefault(row, "id_device"); ContractorName = Db.DbHelper.GetValueString(row, "contractor_name"); ContractName = Db.DbHelper.GetValueString(row, "contract_name"); DeviceName = Db.DbHelper.GetValueString(row, "device_name"); //Admin = new EmployeeSm(Db.DbHelper.GetValueIntOrDefault(row, "id_admin")); //Engeneer = new EmployeeSm(Db.DbHelper.GetValueIntOrDefault(row, "id_engeneer")); IdWorkType = Db.DbHelper.GetValueIntOrNull(row, "id_work_type"); SpecialistSid = Db.DbHelper.GetValueString(row, "specialist_sid"); DateCreate = Db.DbHelper.GetValueDateTimeOrDefault(row, "date_create"); DateStateChange = Db.DbHelper.GetValueDateTimeOrDefault(row, "date_state_change"); ClientSdNum = Db.DbHelper.GetValueString(row, "client_sd_num"); ChangerSid = Db.DbHelper.GetValueString(row, "changer_sid"); CurEngeneerSid = Db.DbHelper.GetValueString(row, "cur_engeneer_sid"); CurAdminSid = Db.DbHelper.GetValueString(row, "cur_admin_sid"); CurTechSid = Db.DbHelper.GetValueString(row, "cur_tech_sid"); CurManagerSid = Db.DbHelper.GetValueString(row, "cur_manager_sid"); CurServiceIssueId = Db.DbHelper.GetValueIntOrNull(row, "cur_service_issue_id"); IdServiceCame = Db.DbHelper.GetValueIntOrNull(row, "id_service_came"); if (loadObj) { if (IdWorkType.HasValue && IdWorkType.Value > 0) WorkType = new WorkType(IdWorkType.Value); Specialist = new EmployeeSm(SpecialistSid); State = new ClaimState(Db.DbHelper.GetValueIntOrDefault(row, "id_claim_state")); Contractor = new Contractor() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_contractor") }; Contract = new Contract() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_contract") }; Device = new Device() { Id = Db.DbHelper.GetValueIntOrDefault(row, "id_device") }; } }
public static ClaimState GetNext(int idClaimState, int claimId) { var currState = new ClaimState(idClaimState); switch (currState.SysName.ToUpper()) { case "NEW": return new ClaimState("NEWADD"); case "NEWADD": return new ClaimState("SET"); case "SET": var wtId = new Claim(claimId).IdWorkType; if (!wtId.HasValue) throw new ArgumentException("Невозможно определить следующий статус. Тип работ не указан."); var wtSysName = new WorkType(wtId.Value).SysName; switch (wtSysName) { case "ДНО": case "НПР": case "ТЭО":case "УТЗ": return new ClaimState("TECHWORK"); case "РТО": case "МТС": case "УРМ": case "ЗРМ": case "МДО": case "ИПТ": case "РЗРД": case "ЗНЗЧ": return new ClaimState("SRVADMWORK"); } break; default: return currState; } //var st = new ClaimState(); //SqlParameter pIdClaim = new SqlParameter() { ParameterName = "id_claim_state", SqlValue = idClaimState, SqlDbType = SqlDbType.Int }; //var dt = Db.Service.ExecuteQueryStoredProcedure("get_next_claim_state", pIdClaim); //if (dt.Rows.Count > 0) //{ // st = new ClaimState(dt.Rows[0]); //} return currState; }