Exemple #1
0
        public static WagonInternalOperation SetOpenOperation(this WagonInternalRoutes wir, int id_operation, DateTime date_start, int?id_condition, int?id_loading_status, string locomotive1, string locomotive2, string note, string user)
        {
            WagonInternalOperation wio_new = null;

            if (wir != null && wir.close == null)
            {
                WagonInternalOperation wio_last = wir.GetLastOperation();
                wio_new = new WagonInternalOperation()
                {
                    id                = 0,
                    id_operation      = id_operation,
                    operation_start   = date_start,
                    id_condition      = (id_condition != null ? (int)id_condition : (wio_last != null ? wio_last.id_condition : 0)),
                    id_loading_status = (id_loading_status != null ? (int)id_loading_status : (wio_last != null ? wio_last.id_loading_status : 0)),
                    locomotive1       = locomotive1,
                    locomotive2       = locomotive2,
                    note              = note,
                    create            = DateTime.Now,
                    create_user       = user,
                    parent_id         = wio_last.CloseOperation(date_start, null, user)
                };

                wir.WagonInternalOperation.Add(wio_new);
            }
            return(wio_new);
        }
Exemple #2
0
 //TODO: Удалить после удаления всех старых операций
 /// <summary>
 /// Установить вагон на станцию на путь
 /// </summary>
 /// <param name="wir"></param>
 /// <param name="id_station"></param>
 /// <param name="id_way"></param>
 /// <param name="date_start"></param>
 /// <param name="position"></param>
 /// <param name="note"></param>
 /// <param name="user"></param>
 /// <returns></returns>
 public static WagonInternalRoutes SetStationWagon_old(this WagonInternalRoutes wir, int id_station, int id_way, DateTime date_start, int position, string note, string user)
 {
     if (wir != null && wir.close == null)
     {
         WagonInternalMovement wim = wir.GetLastMovement();
         // Исключим попытку поставить дублирования записи постановки на путь
         if (wim == null || (wim != null && (wim.id_station != id_station || wim.id_way != id_way || wim.position != position)))
         {
             WagonInternalMovement wim_new = new WagonInternalMovement()
             {
                 id = 0,
                 //id_wagon_internal_routes = wir.id,
                 id_station = id_station,
                 //station_start = date_start,
                 id_way          = id_way,
                 way_start       = date_start,
                 id_outer_way    = null,
                 outer_way_start = null,
                 outer_way_end   = null,
                 position        = position,
                 create          = DateTime.Now,
                 create_user     = user,
                 note            = note,
                 parent_id       = wim.CloseMovement(date_start, null, user)
             };
             wir.WagonInternalMovement.Add(wim_new);
         }
     }
     return(wir);
 }
Exemple #3
0
        public static WagonInternalMovement SetStationWagon(this WagonInternalRoutes wir, int id_station, int id_way, DateTime date_start, int position, string note, string user, bool check_replay)
        {
            WagonInternalMovement wim_new = null;

            if (wir != null && wir.close == null)
            {
                // Получим последнее положение
                WagonInternalMovement wim = wir.GetLastMovement();
                // Исключим попытку поставить дублирования записи постановки на путь
                if (wim == null || (wim != null && (wim.id_station != id_station || wim.id_way != id_way || wim.position != position || wim.id_outer_way != null)))
                {
                    wim_new = new WagonInternalMovement()
                    {
                        id              = 0,
                        id_station      = id_station,
                        id_way          = id_way,
                        way_start       = date_start,
                        way_end         = null,
                        position        = position,
                        id_outer_way    = null,
                        outer_way_start = null,
                        outer_way_end   = null,
                        create          = DateTime.Now,
                        create_user     = user,
                        num_sostav      = null,
                        note            = note,
                        parent_id       = wim.CloseMovement(date_start, null, user),
                    };
                    wir.WagonInternalMovement.Add(wim_new);
                }
            }
            return(wim_new);
        }
Exemple #4
0
 // TODO: Удалить
 /// <summary>
 /// Установить вагон на путь отправки
 /// </summary>
 /// <param name="wir"></param>
 /// <param name="id_outer_ways"></param>
 /// <param name="date_start"></param>
 /// <param name="position"></param>
 /// <param name="note"></param>
 /// <param name="user"></param>
 /// <returns></returns>
 public static WagonInternalRoutes SetSendingWagon_old(this WagonInternalRoutes wir, int id_outer_ways, DateTime date_start, int position, string note, string user)
 {
     if (wir != null && wir.close == null)
     {
         // Получим последнее положение
         WagonInternalMovement wim = wir.GetLastMovement();
         // Исключим попытку поставить дублирования записи постановки на путь
         if (wim != null && wim.id_outer_way != id_outer_ways)
         {
             WagonInternalMovement wim_new = new WagonInternalMovement()
             {
                 id              = 0,
                 id_station      = wim.id_station,
                 id_way          = wim.id_way,
                 way_start       = wim.way_start,
                 way_end         = wim.way_end == null ? date_start : wim.way_end,
                 id_outer_way    = (int?)id_outer_ways,
                 outer_way_start = date_start,
                 outer_way_end   = null,
                 position        = position,
                 create          = DateTime.Now,
                 create_user     = user,
                 note            = note,
                 parent_id       = wim.CloseMovement(date_start, null, user),
             };
             wir.WagonInternalMovement.Add(wim_new);
         }
     }
     return(wir);
 }
Exemple #5
0
 public static WagonInternalOperation GetLastOperation(this WagonInternalRoutes wir)
 {
     if (wir.WagonInternalOperation == null)
     {
         return(null);
     }
     return(wir.WagonInternalOperation.OrderByDescending(o => o.id).FirstOrDefault());
 }
Exemple #6
0
 /// <summary>
 /// Вернуть последнюю запись позиции вагона
 /// </summary>
 /// <param name="wir"></param>
 /// <returns></returns>
 public static WagonInternalMovement GetLastMovement(this WagonInternalRoutes wir)
 {
     if (wir.WagonInternalMovement == null)
     {
         return(null);
     }
     return(wir.WagonInternalMovement.OrderByDescending(m => m.id).FirstOrDefault());
 }
Exemple #7
0
        /// <summary>
        /// Вернуть станцию на которой стоит вагон
        /// </summary>
        /// <param name="wir"></param>
        /// <returns></returns>
        public static int?GetCurrentStation(this WagonInternalRoutes wir)
        {
            if (wir == null || wir.WagonInternalMovement == null)
            {
                return(null);
            }
            WagonInternalMovement wim = wir.GetLastMovement();

            return(wim != null ? (int?)wim.id_station : null);
        }
Exemple #8
0
 public IHttpActionResult GetWagonInternalRoutesOfOutgoingCarsID(long id)
 {
     try
     {
         WagonInternalRoutes cars = this.ef_ids
                                    .Context
                                    .Where(s => s.id_outgoing_car == id)
                                    .ToList()
                                    .Select(c => c.GetWagonInternalRoutes()).FirstOrDefault();
         return(Ok(cars));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
Exemple #9
0
 public static long?CloseWagon(this WagonInternalRoutes wir, DateTime date_end, string note, string user)
 {
     if (wir == null)
     {
         return(null);
     }
     if (wir.close == null)
     {
         wir.note       = note != null ? note : wir.note;
         wir.close      = DateTime.Now;
         wir.close_user = user;
         wir.GetLastMovement().CloseMovement(date_end, note, user);
         wir.GetLastOperation().CloseOperation(date_end, note, user);
         // Далее добавить закрытие перемещений по требованию
     }
     return(wir.id);
 }
Exemple #10
0
        /// <summary>
        /// Вагон на территории АМКР с операцией предявлен?
        /// </summary>
        /// <param name="context"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        public static bool?isLockPresentOperation(this EFDbContext context, int num)
        {
            WagonInternalRoutes wir = context.GetLastWagon(num);

            if (wir == null)
            {
                return(null);
            }
            if (wir.close == null)
            {
                WagonInternalOperation wio = wir.GetLastOperation();
                if (wio == null)
                {
                    return(null);
                }

                return(wio.id_operation == 9 ? true : false);
            }
            else
            {
                return(false);
            }
        }
Exemple #11
0
        /// <summary>
        /// Обновим входящую поставку в WIR
        /// </summary>
        /// <param name="context"></param>
        /// <param name="id_wir"></param>
        /// <param name="out_sypp"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public int UpdateWIR_SAPOutgoingSupply(ref EFDbContext context, long id_wir, Out_Supply out_sypp, string user)
        {
            try
            {
                if (context == null)
                {
                    context = new EFIDS.Concrete.EFDbContext();
                }
                ;
                // Проверим и скорректируем пользователя
                if (String.IsNullOrWhiteSpace(user))
                {
                    user = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
                }
                EFWagonInternalRoutes ef_wir    = new EFWagonInternalRoutes(context);
                EFSAPOutgoingSupply   ef_sap_os = new EFSAPOutgoingSupply(context);

                // Получим wir
                WagonInternalRoutes wir = ef_wir.Context.Where(w => w.id == id_wir).FirstOrDefault();
                if (wir == null)
                {
                    return((int)errors_base.not_wir_db);             // В базе данных нет записи по WagonInternalRoutes (Внутреннее перемещение вагонов)
                }
                // Проверим sap исходящая поставка указана
                if (wir.id_sap_outbound_supply != null)
                {
                    SAPOutgoingSupply sap_os = ef_sap_os.Context.Where(s => s.id == wir.id_sap_outbound_supply).FirstOrDefault();
                    if (sap_os == null)
                    {
                        return((int)errors_base.not_sap_os_db);                // В базе данных нет записи по SAPOutgoingSupply (SAP Исходящая поставка)
                    }
                    // Проверим id соответсвуют (SAPOutgoingSupply и Out_Supply)
                    if (sap_os.id_out_supply == out_sypp.id)
                    {
                        // Соответсвует обновим
                        sap_os.id_outgoing_car = wir.id_outgoing_car;
                        sap_os.num             = wir.num;
                        sap_os.VBELN           = out_sypp.VBELN;
                        sap_os.ERDAT           = out_sypp.ERDAT;
                        sap_os.ZBEZEI          = out_sypp.ZBEZEI;
                        sap_os.STAWN           = out_sypp.STAWN;
                        sap_os.NAME1_AG        = out_sypp.NAME1_AG;
                        sap_os.KUNNR_AG        = out_sypp.KUNNR_AG;
                        sap_os.ZRWNAME         = out_sypp.ZRWNAME;
                        sap_os.ZENDSTAT        = out_sypp.ZENDSTAT;
                        sap_os.ZCRSTNAME       = out_sypp.ZCRSTNAME;
                        sap_os.ZCROSSSTAT      = out_sypp.ZCROSSSTAT;
                        sap_os.ZZVES_NETTO     = out_sypp.ZZVES_NETTO;
                        sap_os.ABTNR           = out_sypp.ABTNR;
                        sap_os.VTEXT           = out_sypp.VTEXT;
                        sap_os.ZZDOLG          = out_sypp.ZZDOLG;
                        sap_os.ZZFIO           = out_sypp.ZZFIO;
                        sap_os.ZZPLATEL        = out_sypp.ZZPLATEL;
                        sap_os.ZZNAME_PLATEL   = out_sypp.ZZNAME_PLATEL;
                        //sap_os.note = out_sypp.note,
                        sap_os.change      = DateTime.Now;
                        sap_os.change_user = user;
                        ef_sap_os.Update(sap_os);
                        return(2); // Обновлена
                    }
                    else
                    {
                        ef_sap_os.Delete(sap_os.id);
                        // не соответсвует, удалим (и создадим новый)
                    }
                }
                // Содадим и добавим новую исходящую поставку
                SAPOutgoingSupply sap_os_new = new SAPOutgoingSupply()
                {
                    id              = 0,
                    id_out_supply   = 0,
                    id_outgoing_car = wir.id_outgoing_car,
                    num             = wir.num,
                    VBELN           = out_sypp.VBELN.Trim(),
                    ERDAT           = out_sypp.ERDAT,
                    ZBEZEI          = out_sypp.ZBEZEI.Trim(),
                    STAWN           = out_sypp.STAWN.Trim(),
                    NAME1_AG        = out_sypp.NAME1_AG.Trim(),
                    KUNNR_AG        = out_sypp.KUNNR_AG.Trim(),
                    ZRWNAME         = out_sypp.ZRWNAME.Trim(),
                    ZENDSTAT        = out_sypp.ZENDSTAT.Trim(),
                    ZCRSTNAME       = out_sypp.ZCRSTNAME.Trim(),
                    ZCROSSSTAT      = out_sypp.ZCROSSSTAT.Trim(),
                    ZZVES_NETTO     = out_sypp.ZZVES_NETTO,
                    ABTNR           = out_sypp.ABTNR.Trim(),
                    VTEXT           = out_sypp.VTEXT.Trim(),
                    ZZDOLG          = out_sypp.ZZDOLG.Trim(),
                    ZZFIO           = out_sypp.ZZFIO.Trim(),
                    ZZPLATEL        = out_sypp.ZZPLATEL.Trim(),
                    ZZNAME_PLATEL   = out_sypp.ZZNAME_PLATEL.Trim(),
                    note            = null,
                    create          = DateTime.Now,
                    create_user     = user,
                };
                sap_os_new.Out_Supply = out_sypp;
                ef_sap_os.Add(sap_os_new);
                wir.SAPOutgoingSupply = sap_os_new;
                ef_wir.Update(wir);
                return(1); // Добавлена новая
            }
            catch (Exception e)
            {
                e.ExceptionMethodLog(String.Format("UpdateWIR_SAPOutgoingSupply(context = {0}, id_wir = {1}, cur_out_sypp = {2}, user = {3})", context, id_wir, out_sypp, user), servece_owner, eventID);
                return((int)errors_base.global);
            }
        }
Exemple #12
0
        /// <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);// Ошибка
            }
        }
Exemple #13
0
        /// <summary>
        /// Правка разметки по прибытию
        /// </summary>
        /// <param name="context"></param>
        /// <param name="arr_cars"></param>
        /// <param name="id_condition"></param>
        /// <param name="id_type"></param>
        /// <param name="date_rem_vag"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public int OperationUpdateWagonMarking(ref EFDbContext context, ArrivalCars arr_cars, int id_condition, int?id_type, DateTime?date_rem_vag, string user)
        {
            try
            {
                // Проверка контекста
                if (context == null)
                {
                    context = new EFDbContext();
                }
                // Проверим и скорректируем пользователя
                if (String.IsNullOrWhiteSpace(user))
                {
                    user = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
                }
                // Определим наличие вагона в прибытии
                if (arr_cars == null)
                {
                    return((int)errors_base.not_arrival_cars_db);                  // Ошибка, нет записи вагона по прибытию
                }
                //
                if (arr_cars.id_arrival_uz_vagon == null)
                {
                    return((int)errors_base.not_arrival_uz_vagon);                                      //Ошибка, нет сылки на документ прибывшего вагона
                }
                // Получим контекст список документов на принятые вагоны
                EFArrival_UZ_Vagon ef_arr_uz_vag = new EFArrival_UZ_Vagon(context);
                // Получим запись документа принятого вагона
                Arrival_UZ_Vagon arr_uz_vag = ef_arr_uz_vag.Context.Where(v => v.id == arr_cars.id_arrival_uz_vagon).FirstOrDefault();
                if (arr_uz_vag == null)
                {
                    return((int)errors_base.not_arrival_uz_vagon);                    //Ошибка, нет записи документа прибывшего вагона
                }
                // Получим контекст справочник вагонов
                EFDirectory_Wagons ef_dir_wag = new EFDirectory_Wagons(context);
                // Получим запись вагона из справочника
                Directory_Wagons wagon = ef_dir_wag.Context.Where(w => w.num == arr_uz_vag.num).FirstOrDefault();
                if (wagon == null)
                {
                    return((int)errors_base.not_dir_wagon_of_db);               // Указаного вагона нет в базе
                }
                // Получим контекст Внутренего перемещения
                EFWagonInternalRoutes ef_wir = new EFWagonInternalRoutes(context);
                WagonInternalRoutes   wir    = ef_wir.Context.Where(r => r.id_arrival_car == arr_cars.id).FirstOrDefault();

                if (wir == null)
                {
                    return((int)errors_base.not_wir_db);             // Ошибка, нет записи внутренего перемещения вагона
                }
                // Найдем первую запись
                WagonInternalOperation first_wio = wir.WagonInternalOperation.Where(o => o.parent_id == null).OrderBy(o => o.id).FirstOrDefault();
                if (first_wio == null)
                {
                    return((int)errors_base.not_wio_db);                   // Ошибка, нет записи операций внутренего перемещения вагона
                }
                int id_condition_first = first_wio.id_condition;
                // Определим все записи
                List <WagonInternalOperation> list_wio = wir.WagonInternalOperation.OrderBy(o => o.id).ToList();
                // Обновим годность по внутренему перемещению
                foreach (WagonInternalOperation wio in list_wio)
                {
                    if (wio.id_condition == id_condition_first)
                    {
                        wio.id_condition = id_condition;
                    }
                    else
                    {
                        break; // Дрогая годность выйти изцикла
                    }
                }
                ef_wir.Update(wir);
                // Запись документа есть правим тип и годность по прибытию
                arr_uz_vag.id_condition = id_condition;
                arr_uz_vag.id_type      = id_type;
                ef_arr_uz_vag.Update(arr_uz_vag);
                // Запись справочника есть, правим дату ремонта
                wagon.date_rem_vag = date_rem_vag;
                ef_dir_wag.Update(wagon);
                return(1);
            }
            catch (Exception e)
            {
                e.ExceptionMethodLog(String.Format("OperationUpdateWagonMarking(context={0}, arr_cars={1}, id_condition ={2}, id_type={3}, date_rem_vag ={4}, user={5})",
                                                   context, arr_cars, id_condition, id_type, date_rem_vag, user), servece_owner, this.eventID);
                return((int)errors_base.global);// Ошибка
            }
        }