public Claim Get(int id) { Claim model; try { model = new Claim(id, GetCurUser(), false); } catch (AccessDenyException ex) { var resp = new HttpResponseMessage(HttpStatusCode.Conflict) { Content = new StringContent(ex.Message), ReasonPhrase = ex.Message }; throw new HttpResponseException(resp); } return model; }
public HttpResponseMessage GoBack(Claim model) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Created); try { model.CurUserAdSid = GetCurUser().Sid; //model.Save(SetNextState.Back); model.Go(false); //model.Go2State(SetNextState.Back); response.Content = new StringContent(String.Format("{{\"id\":{0},\"sid\":\"{1}\"}}", model.Id, model.Sid)); } catch (Exception ex) { response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StringContent(MessageHelper.ConfigureExceptionMessage(ex)); } return response; }
public static void RemoteStateChange(int idClaim, string stateSysName, string creatorSid, string descr = null, int? idZipClaim = null) { var claim = new Claim(idClaim); claim.CurUserAdSid = creatorSid; if (claim.Id > 0) { var state = new ClaimState(stateSysName); claim.SaveStateStep(state.Id, descr, idZipClaim: idZipClaim); //if (stateSysName.ToUpper().Equals("ZIPCL-FAIL")) //{ // var nextState = new ClaimState("ZIPBUYCANCEL"); // claim.SaveStateStep(nextState.Id); //} } }
/// <summary> /// Для удаленного создания заявки на ЗИП из системы планирования (ДСУ) /// </summary> /// <param name="idServiceCame"></param> /// <param name="creatorSid"></param> /// <returns></returns> public static int SaveFromServicePlan4ZipClaim(int idServiceCame) { var came = new PlanServiceCame(idServiceCame); if (!came.NeedZip.HasValue || !came.NeedZip.Value) return 0; var claim = new Claim(); claim.CurUserAdSid = came.CreatorSid; claim.IdDevice = came.IdDevice; claim.IdContract = came.IdContract; claim.IdContractor = came.IdContractor; claim.CurUserAdSid = came.CreatorSid; claim.IdServiceCame = idServiceCame; claim.IdWorkType = Service.WorkType.GetWorkTypeForZipClaim().Id; claim.CurAdminSid = came.CreatorSid; claim.CurEngeneerSid = came.ServiceEngeneerSid; //claim.Descr = came.ZipDescr; var sheet = new ServiceSheet(); sheet.CounterDescr = came.Descr; sheet.Descr = came.ZipDescr; sheet.AdminSid = came.CreatorSid; sheet.EngeneerSid = came.ServiceEngeneerSid; sheet.CounterMono = came.Counter; sheet.CounterColor = came.CounterColor; sheet.ProcessEnabled = came.ProcessEnabled.HasValue ? came.ProcessEnabled.Value : false; sheet.DeviceEnabled = came.DeviceEnabled.HasValue ? came.DeviceEnabled.Value : false; sheet.ZipClaim = came.NeedZip; sheet.NoCounter = came.NoCounter; sheet.CounterUnavailable = came.CounterAvailable; sheet.IdServiceIssue = -999; claim.ServiceSheet4Save = sheet; var firstState = new ClaimState("SRVENGWORK"); int id = claim.Save(firstState); claim.Go(); return id; }
/// <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 async Task<ListResult<Claim>> GetListAsync(AdUser user, string adminSid = null, string engeneerSid = null, DateTime? dateStart = null, DateTime? dateEnd = null, int? topRows = null, string managerSid = null, string techSid = null, string serialNum = null, int? idDevice = null, bool? activeClaimsOnly = false, int? idClaimState = null, int? clientId = null, string clientSdNum = null, int? claimId = null, string deviceName = null, int? pageNum = null, string groupStates = null, string address = null) { if (user.Is(AdGroup.ServiceAdmin)) { adminSid = user.Sid; } if (user.Is(AdGroup.ServiceEngeneer)) engeneerSid = user.Sid; if (user.Is(AdGroup.ServiceManager)) managerSid = user.Sid; if (user.Is(AdGroup.ServiceTech)) techSid = user.Sid; //!!!!ЕСЛИ МЕНЯЕШЬ ЭТУ ФУНКЦИЮ ПОМИ ЧТО ЕЩЕ НАДО ПОПРАВИТЬ ФУНКЦИЮ ЧУТЬ НИЖЕ if (!topRows.HasValue) topRows = 30; if (!pageNum.HasValue)pageNum = 1; SqlParameter pServAdminSid = new SqlParameter() { ParameterName = "admin_sid", SqlValue = adminSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pServEngeneerSid = new SqlParameter() { ParameterName = "engeneer_sid", SqlValue = engeneerSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pDateStart = new SqlParameter() { ParameterName = "date_start", SqlValue = dateStart, SqlDbType = SqlDbType.Date }; SqlParameter pDateEnd = new SqlParameter() { ParameterName = "date_end", SqlValue = dateEnd, SqlDbType = SqlDbType.Date }; SqlParameter pTopRows = new SqlParameter() { ParameterName = "top_rows", SqlValue = topRows, SqlDbType = SqlDbType.Int }; SqlParameter pManagerSid = new SqlParameter() { ParameterName = "manager_sid", SqlValue = managerSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pTechSid = new SqlParameter() { ParameterName = "tech_sid", SqlValue = techSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pSerialNum = new SqlParameter() { ParameterName = "serial_num", SqlValue = serialNum, SqlDbType = SqlDbType.NVarChar }; SqlParameter pIdDevice = new SqlParameter() { ParameterName = "id_device", SqlValue = idDevice, SqlDbType = SqlDbType.Int }; SqlParameter pActiveClaimsOnly = new SqlParameter() { ParameterName = "active_claims_only", SqlValue = activeClaimsOnly, SqlDbType = SqlDbType.Bit }; SqlParameter pIdClaimState = new SqlParameter() { ParameterName = "id_claim_state", SqlValue = idClaimState, SqlDbType = SqlDbType.Int }; SqlParameter pClientId = new SqlParameter() { ParameterName = "id_client", SqlValue = clientId, SqlDbType = SqlDbType.Int }; SqlParameter pClientSdNum = new SqlParameter() { ParameterName = "client_sd_num", SqlValue = clientSdNum, SqlDbType = SqlDbType.Int }; SqlParameter pclaimId = new SqlParameter() { ParameterName = "claim_id", SqlValue = claimId, SqlDbType = SqlDbType.Int }; SqlParameter pDeviceName = new SqlParameter() { ParameterName = "device_name", SqlValue = deviceName, SqlDbType = SqlDbType.NVarChar }; SqlParameter pPageNum = new SqlParameter() { ParameterName = "page_num", SqlValue = pageNum, SqlDbType = SqlDbType.Int }; SqlParameter pGroupStates = new SqlParameter() { ParameterName = "group_state_list", SqlValue = groupStates, SqlDbType = SqlDbType.NVarChar }; SqlParameter pAddress = new SqlParameter() { ParameterName = "address", SqlValue = address, SqlDbType = SqlDbType.NVarChar }; var dt = Db.Service.ExecuteQueryStoredProcedure("get_claim_list", pServAdminSid, pServEngeneerSid, pDateStart, pDateEnd, pTopRows, pManagerSid, pTechSid, pSerialNum, pIdDevice, pActiveClaimsOnly, pIdClaimState, pClientId, pClientSdNum, pclaimId, pDeviceName, pPageNum, pGroupStates, pAddress); int cnt = 0; var lst = new List<Claim>(); if (dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { var model = new Claim(row, false, false); lst.Add(model); } cnt = Db.DbHelper.GetValueIntOrDefault(dt.Rows[0], "total_count"); } // Общее количество // var dtCnt = Db.Service.ExecuteQueryStoredProcedure("get_claim_list_count", pServAdminSid, pServEngeneerSid, pDateStart, pDateEnd, pManagerSid, pTechSid, pSerialNum, pIdDevice, pActiveClaimsOnly, pIdClaimState, pClientId); //int cnt = 0; // if (dtCnt.Rows.Count > 0) // { // cnt = Db.DbHelper.GetValueIntOrDefault(dtCnt.Rows[0], "cnt"); // } var result = new ListResult<Claim>(lst, cnt); return result; }
public void SendMailTo(string message, string subject, int? serviceSheetId = null, params ServiceRole[] mailTo) { var cl = new Claim(Id, loadObject: false); foreach (ServiceRole mt in mailTo) { List<MailAddress> recipients = new List<MailAddress>(); if (mt == ServiceRole.CurAdmin) { string sid = cl.CurAdminSid; string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"<p style='color: red; font-size: 14pt'>Сообщение для Сервисного Администратора не может быть доставлено, поэтому в рассылку включен контролер процесса.</p>{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } else if (mt == ServiceRole.CurEngeneer) { string sid = cl.CurEngeneerSid; string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Сервисного Инженера не может быть доставлено, поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } else if (mt == ServiceRole.CurManager) { string sid = cl.CurManagerSid; string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Менеджера сервисного центра не может быть доставлено, поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } else if (mt == ServiceRole.CurTech) { string sid = cl.CurTechSid; string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Специалиста Технической Поддержки не может быть доставлено, поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } //else if (mt == ServiceRole.CurTech) //{ // string sid = cl.CurTechSid; // email = new[] { Employee.GetEmailBySid(sid)}; //} else if (mt == ServiceRole.CurSpecialist) { string sid = cl.SpecialistSid; string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для текущего Специалиста заявки не может быть доставлено, поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } else if (mt == ServiceRole.AllTech) { //var emailList = new List<string>(); foreach (var item in AdHelper.GetUserListByAdGroup(AdGroup.ServiceTech)) { string email = Employee.GetEmailBySid(item.Key); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Специалиста Технической Поддержки не может быть доставлено поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } //email = emailList.ToArray(); } else if (mt == ServiceRole.ZipConfirm) { foreach (var item in AdHelper.GetUserListByAdGroup(AdGroup.ServiceZipClaimConfirm)) { string email = Employee.GetEmailBySid(item.Key); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Утврерждающего список ЗИП не может быть доставлено поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } } else if (mt == ServiceRole.ServiceSheetEngeneer) { string sid = null; if (serviceSheetId.HasValue) { sid = new ServiceSheet(serviceSheetId.Value).EngeneerSid; } string email = Employee.GetEmailBySid(sid); if (!String.IsNullOrEmpty(email)) { recipients.Add(new MailAddress(email)); } else { message = $"Сообщение для Инженера сервисного листа №{serviceSheetId} не может быть доставлено, поэтому в рассылку включен контролер процесса.\r\n{message}"; recipients.AddRange(AdHelper.GetRecipientsFromAdGroup(AdGroup.ServiceControler)); } } else { throw new ArgumentException("Указанный получатель не обрабатывается"); } if (recipients.Any()) MessageHelper.SendMailSmtp(subject, message, true, recipients.ToArray()); } }
public static void ServiceSheetIsPayWraped(int serviceSheetId, string creatorSid) { var ss = new ServiceSheet(serviceSheetId); if (ss.IsPayed.HasValue) { string text; string subject; if (ss.IsPayed.Value) { text = $"Принят сервисный лист №{serviceSheetId} по заявке №%ID% %LINK%"; subject = $"[Заявка №%ID%] Принят сервисный лист №{serviceSheetId}"; } else { text = $"Не принят сервисный лист №{serviceSheetId} по заявке №%ID%<br />Причина: {ss.NotPayedComment} %LINK%"; subject = $"[Заявка №%ID%] Не принят сервисный лист №{serviceSheetId}"; } var cl = new Claim(ss.IdClaim); cl.CurUserAdSid = creatorSid; cl.SendNote(subject, text, serviceSheetId, ServiceRole.ServiceSheetEngeneer); cl.Go(); } }
public static void CreateClaimUnitWork(int idClaim, string creatorSid) { var claim = new Claim(idClaim, true, true); var device = new Device(claim.IdDevice, claim.IdContract); var lastServiceSheet = claim.GetLastServiceSheet(); var zipItemList = lastServiceSheet.GetOrderedZipItemList(null); if (zipItemList.Any())//Если ЗИПа нет то заявка не создается { var zipClaim = new ZipClaim(); zipClaim.IdDevice = claim.IdDevice; zipClaim.SerialNum = claim.Device.SerialNum; zipClaim.DeviceModel = claim.Device.ModelName; zipClaim.Contractor = claim.ContractorName; zipClaim.IdCity = device.IdCity; zipClaim.City = device.CityName; zipClaim.Address = device.Address; zipClaim.Descr = "Заявка создана автоматически из системы Сервис"; zipClaim.Counter = lastServiceSheet.CounterMono; zipClaim.CounterColour = lastServiceSheet.CounterColor; zipClaim.IdContractor = claim.IdContractor; zipClaim.IdServiceEngeneer = UserUnitProg.GetUserId(lastServiceSheet.EngeneerSid); zipClaim.IdEngeneerConclusion = lastServiceSheet.DeviceEnabled ? 1 : 2; zipClaim.IdManager = claim.Contract.ManagerIdUnitProg; zipClaim.IdServiceAdmin = UserUnitProg.GetUserId(lastServiceSheet.AdminSid); zipClaim.ServiceDeskNum = claim.Id.ToString(); zipClaim.ObjectName = device.ObjectName; zipClaim.ContractNum = claim.Contract.Number; zipClaim.ContractType = claim.Contract.TypeName; zipClaim.ContractorSdNum = claim.ClientSdNum; zipClaim.ServiceIdServSheet = lastServiceSheet.Id.ToString(); zipClaim.ServiceIdClaim = claim.Id.ToString(); zipClaim.CurUserAdSid = creatorSid; zipClaim.SaveUnitProg(); if (zipItemList != null && zipItemList.Any()) { foreach (var item in zipItemList) { item.ClaimId = zipClaim.Id; item.CurUserAdSid = creatorSid; item.SaveUnitProg(); } } zipClaim.SetSendStateUnitProg(); lastServiceSheet.UnitProgZipClaimId = zipClaim.Id; lastServiceSheet.SaveUnitProgZipClaimId(); lastServiceSheet.CurUserAdSid = creatorSid; lastServiceSheet.SetOrderedZipItemListRealyOrdered(); } }
/// <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); } }
public IHttpActionResult RemoteStateChange(int? idClaim, string stateSysName, string creatorSid, string descr = null, int? idZipClaim = null) { if (!idClaim.HasValue || String.IsNullOrEmpty(stateSysName)) return NotFound(); Claim.RemoteStateChange(idClaim.Value, stateSysName, creatorSid, descr, idZipClaim); var claim = new Claim(idClaim.Value); claim.CurUserAdSid = creatorSid; //claim.Descr = descr; claim.Go(); return Ok(); }
public HttpResponseMessage Go(Claim model) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Created); try { model.CurUserAdSid = GetCurUser().Sid; model.Go(); response.Content = new StringContent($"{{\"id\":{model.Id},\"sid\":\"{model.Sid}\"}}"); } catch (Exception ex) { response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StringContent(MessageHelper.ConfigureExceptionMessage(ex)); } return response; }
public void Save(string lastStateSysName) { //TimeOnWorkMinutes = время от статуса в работу до создания заявки if (!TimeOnWorkMinutes.HasValue) { var stateInWork = Claim.GetLastState(IdClaim, lastStateSysName); if (stateInWork != null) { TimeOnWorkMinutes = (int) (DateTime.Now - stateInWork.DateCreate).TotalMinutes; if (TimeOnWorkMinutes == 0) TimeOnWorkMinutes = 1; } } //Получаем ткущий тип работ по заявке int? wtId = new Claim(IdClaim).IdWorkType; if (wtId.HasValue) WorkTypeId = wtId.Value; SqlParameter pId = new SqlParameter() { ParameterName = "id", SqlValue = Id, SqlDbType = SqlDbType.Int }; SqlParameter pIdClaim = new SqlParameter() { ParameterName = "id_claim", SqlValue = IdClaim, SqlDbType = SqlDbType.Int }; SqlParameter pWorkTypeId = new SqlParameter() { ParameterName = "id_work_type", SqlValue = WorkTypeId, SqlDbType = SqlDbType.Int }; SqlParameter pIdServiceIssue = new SqlParameter() { ParameterName = "id_service_issue", SqlValue = IdServiceIssue, SqlDbType = SqlDbType.Int }; SqlParameter pProcessEnabled = new SqlParameter() { ParameterName = "process_enabled", SqlValue = ProcessEnabled, SqlDbType = SqlDbType.Bit }; SqlParameter pDeviceEnabled = new SqlParameter() { ParameterName = "device_enabled", SqlValue = DeviceEnabled, SqlDbType = SqlDbType.Bit }; SqlParameter pZipClaim = new SqlParameter() { ParameterName = "zip_claim", SqlValue = ZipClaim, SqlDbType = SqlDbType.Int }; SqlParameter pZipClaimNumber = new SqlParameter() { ParameterName = "zip_claim_number", SqlValue = ZipClaimNumber, SqlDbType = SqlDbType.NVarChar }; SqlParameter pCounterMono = new SqlParameter() { ParameterName = "counter_mono", SqlValue = CounterMono, SqlDbType = SqlDbType.BigInt }; SqlParameter pCounterColor = new SqlParameter() { ParameterName = "counter_color", SqlValue = CounterColor, SqlDbType = SqlDbType.BigInt }; SqlParameter pCounterTotal = new SqlParameter() { ParameterName = "counter_total", SqlValue = CounterTotal, SqlDbType = SqlDbType.BigInt }; SqlParameter pNoCounter = new SqlParameter() { ParameterName = "no_counter", SqlValue = NoCounter, SqlDbType = SqlDbType.Bit }; SqlParameter pCounterUnavailable = new SqlParameter() { ParameterName = "counter_unavailable", SqlValue = CounterUnavailable, SqlDbType = SqlDbType.Bit }; SqlParameter pDescr = new SqlParameter() { ParameterName = "descr", SqlValue = Descr, SqlDbType = SqlDbType.NVarChar }; SqlParameter pCreatorAdSid = new SqlParameter() { ParameterName = "creator_sid", SqlValue = CurUserAdSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pCounterDescr = new SqlParameter() { ParameterName = "counter_descr", SqlValue = CounterDescr, SqlDbType = SqlDbType.NVarChar }; SqlParameter pEngeneerSid = new SqlParameter() { ParameterName = "engeneer_sid", SqlValue = EngeneerSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pAdminSid = new SqlParameter() { ParameterName = "admin_sid", SqlValue = AdminSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pTimeOnWorkMinutes = new SqlParameter() { ParameterName = "time_on_work_minutes", SqlValue = TimeOnWorkMinutes, SqlDbType = SqlDbType.Int }; SqlParameter pZipClientGivenInstall = new SqlParameter() { ParameterName = "zip_client_given_install", SqlValue = ZipClientGivenInstall, SqlDbType = SqlDbType.Bit }; var dt = Db.Service.ExecuteQueryStoredProcedure("save_service_sheet", pId, pProcessEnabled, pDeviceEnabled, pZipClaim, pZipClaimNumber, pCounterMono, pCounterColor, pCounterTotal, pNoCounter, pCounterUnavailable, pDescr, pCreatorAdSid, pCounterDescr, pEngeneerSid, pAdminSid, pIdServiceIssue, pIdClaim, pTimeOnWorkMinutes, pWorkTypeId, pZipClientGivenInstall); int id = 0; if (dt.Rows.Count > 0) { int.TryParse(dt.Rows[0]["id"].ToString(), out id); Id = id; } }
//public enum ServiceClaimRight //{ // Save, // Go, // Close //} //private Claim cliam4check; //private void LoadClaim4Check() //{ // if (cliam4check == null || cliam4check.Id == 0)cliam4check = new Claim(Id, loadObject: false); //} private bool UserIsCurrentClaimRole(ServiceRole role, bool roleOrSpecialist = false) { if (IsNullOrEmpty(CurUserAdSid)) return false; bool result = false; var cl = new Claim(Id, loadObject: false); //LoadClaim4Check(); if (role == ServiceRole.CurTech) { return (roleOrSpecialist && cl.SpecialistSid == CurUserAdSid) || cl.CurTechSid == CurUserAdSid; } else if (role == ServiceRole.CurAdmin) { return (roleOrSpecialist && cl.SpecialistSid == CurUserAdSid) || cl.CurAdminSid == CurUserAdSid; } else if (role == ServiceRole.CurManager) { return (roleOrSpecialist && cl.SpecialistSid == CurUserAdSid) || cl.CurManagerSid == CurUserAdSid; } else if (role == ServiceRole.CurEngeneer) { return (roleOrSpecialist && cl.SpecialistSid == CurUserAdSid) || cl.CurEngeneerSid == CurUserAdSid; } else if (role == ServiceRole.CurEngeneer) { return (roleOrSpecialist && cl.SpecialistSid == CurUserAdSid) || cl.SpecialistSid == CurUserAdSid; } else if (role == ServiceRole.CurSpecialist) { return cl.SpecialistSid == CurUserAdSid; } return result; }
public static IEnumerable<Claim> GetList(AdUser user, out int cnt, string adminSid = null, string engeneerSid = null, DateTime? dateStart = null, DateTime? dateEnd = null, int? topRows = null, string managerSid = null, string techSid = null, string serialNum=null, int? idDevice = null, bool? activeClaimsOnly = false, int? idClaimState = null, int? clientId = null, string clientSdNum = null) { if (user.Is(AdGroup.ServiceAdmin)) { adminSid = user.Sid; } if (user.Is(AdGroup.ServiceEngeneer)) engeneerSid = user.Sid; if (user.Is(AdGroup.ServiceManager)) managerSid = user.Sid; if (user.Is(AdGroup.ServiceTech)) techSid = user.Sid; //!!!!ЕСЛИ МЕНЯЕШЬ ЭТУ ФУНКЦИЮ ПОМИ ЧТО НАДО ПОПРАВИТЬ ФУНКЦИЮ ЧУТЬ НИЖЕ if (!topRows.HasValue) topRows = 30; SqlParameter pServAdminSid = new SqlParameter() { ParameterName = "admin_sid", SqlValue = adminSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pServEngeneerSid = new SqlParameter() { ParameterName = "engeneer_sid", SqlValue = engeneerSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pDateStart = new SqlParameter() { ParameterName = "date_start", SqlValue = dateStart, SqlDbType = SqlDbType.Date }; SqlParameter pDateEnd = new SqlParameter() { ParameterName = "date_end", SqlValue = dateEnd, SqlDbType = SqlDbType.Date }; SqlParameter pTopRows = new SqlParameter() { ParameterName = "top_rows", SqlValue = topRows, SqlDbType = SqlDbType.Int }; SqlParameter pManagerSid = new SqlParameter() { ParameterName = "manager_sid", SqlValue = managerSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pTechSid = new SqlParameter() { ParameterName = "tech_sid", SqlValue = techSid, SqlDbType = SqlDbType.VarChar }; SqlParameter pSerialNum = new SqlParameter() { ParameterName = "serial_num", SqlValue = serialNum, SqlDbType = SqlDbType.NVarChar }; SqlParameter pIdDevice = new SqlParameter() { ParameterName = "id_device", SqlValue = idDevice, SqlDbType = SqlDbType.Int }; SqlParameter pActiveClaimsOnly = new SqlParameter() { ParameterName = "active_claims_only", SqlValue = activeClaimsOnly, SqlDbType = SqlDbType.Bit }; SqlParameter pIdClaimState = new SqlParameter() { ParameterName = "id_claim_state", SqlValue = idClaimState, SqlDbType = SqlDbType.Int }; SqlParameter pClientId = new SqlParameter() { ParameterName = "id_client", SqlValue = clientId, SqlDbType = SqlDbType.Int }; SqlParameter pClientSdNum = new SqlParameter() { ParameterName = "client_sd_num", SqlValue = clientSdNum, SqlDbType = SqlDbType.Int }; var dt = Db.Service.ExecuteQueryStoredProcedure("get_claim_list", pServAdminSid, pServEngeneerSid, pDateStart, pDateEnd, pTopRows, pManagerSid, pTechSid, pSerialNum, pIdDevice, pActiveClaimsOnly, pIdClaimState, pClientId, pClientSdNum); var lst = new List<Claim>(); foreach (DataRow row in dt.Rows) { var model = new Claim(row, true); lst.Add(model); } //Общее количество var dtCnt = Db.Service.ExecuteQueryStoredProcedure("get_claim_list_count", pServAdminSid, pServEngeneerSid, pDateStart, pDateEnd, pManagerSid, pTechSid, pSerialNum, pIdDevice, pActiveClaimsOnly, pIdClaimState, pClientId); cnt = 0; if (dtCnt.Rows.Count > 0) { cnt = Db.DbHelper.GetValueIntOrDefault(dtCnt.Rows[0], "cnt"); } return lst; }
/// <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); } }
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; }