/// <summary> /// Обновить информацию по всем входящим поставкам по указаному вагону /// </summary> /// <param name="context"></param> /// <param name="list_cargo"></param> /// <param name="num"></param> /// <param name="gr_sap_is"></param> /// <param name="user"></param> /// <returns></returns> public ResultUpdateID UpdateIncomingSupply(ref EFDbContext context, List <int> list_cargo, int num, List <SAPIncomingSupply> gr_sap_is, string user) { ResultUpdateID result = new ResultUpdateID(0); try { if (context == null) { context = new EFDbContext(); } // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFSAPIncomingSupply ef_sap = new EFSAPIncomingSupply(context); EFArrivalCars ef_ac = new EFArrivalCars(context); EFArrival_UZ_Vagon ef_uz_vag = new EFArrival_UZ_Vagon(context); // Определим количество вх. поставок по указаному вагону int count_is = gr_sap_is.Count(); // Пройдемся по всем записям вх пост. отсортированых по возрастанию (последняя актуальная) foreach (SAPIncomingSupply sap in gr_sap_is.OrderBy(w => w.id).ToList()) { // Это последняя запись (или единственная) if (count_is == 1) { // Это Актуальная запиь ArrivalCars car = ef_ac.Context.Where(c => c.id == sap.id_arrival_car).FirstOrDefault(); if (car != null) { Arrival_UZ_Vagon uz_vag = ef_uz_vag.Context.Where(c => c.id == car.id_arrival_uz_vagon).FirstOrDefault(); if (uz_vag != null) { // Определить вагон на территории АМКР WagonInternalRoutes last_wir = context.GetLastWagon(num); if (last_wir != null && last_wir.close == null) { // Вагон на территории АМКР // Проверим на груз int id_cargo = list_cargo.ToList().Find(x => x == uz_vag.id_cargo); if (id_cargo == 0) { // Обновить SAPIncomingSupply sap_up = GetUpdateIncomingSupplyOfWebSAP(sap, user); // Обновим запись ef_sap.Update(sap_up); result.SetUpdateResult(1, sap_up.id); // Ок } else { // Закрыть этот вагон, по грузу sap.note = "Строка закрыта по данному грузу не формируется входящая поставка"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } else { // Закрыть это вагон вагон за территорией АМКР sap.note = "Строка закрыта, вагона нет на территории АМКР"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } else { DateTime limit_data = DateTime.Now.AddDays(-1 * this.day_approach_limit); // Проверка на время ожидания с подходов. if (sap.create >= limit_data) { // Вагон на подходах и лимит времени не прошол // Обновить SAPIncomingSupply sap_up = GetUpdateIncomingSupplyOfWebSAP(sap, user); // Обновим запись sap.note = "Вагон на подходах"; ef_sap.Update(sap_up); result.SetUpdateResult(1, sap_up.id); // Ок } else { // Вагон не принят, закрыть sap.note = "Строка закрыта, вагон не принят на АМКР"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } } else { result.SetResult((int)errors_base.not_arrival_cars_db); // Ошибка и выход } } else { // Закроем запись это старая sap.note = "Строка закрыта, запись не актуальная"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } count_is--; } // Обновим в базе if (result.error == 0 && result.result == 0) { // Если без ошибок, тогда записываем результат применения result.SetResult(context.SaveChanges()); } return(result); } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateIncomingSupply(context = {0}, list_cargo = {1}, num = {2}, gr_sap_is = {3}, user = {4})", context, list_cargo, num, gr_sap_is, user), servece_owner, eventID); result.SetResult((int)errors_base.global); return(result);// Ошибка } }