Example #1
0
        public static string SaveKmhCard(transfer card, int saveType, Guid order_id)
        {
            DateTime CurDateTime = DateTime.Now;

            // saveType == 1 (сохранить как основную)
            // saveType == 2 (сохранить как приказную)
            // saveType == 3 (как приказную и как основную)

            using (ProductProvider provider = new ProductProvider())
            {
                // {!} здесь может быть проблемное место, потому что надо оборачивать действия
                // в одну транзакцию

                // проходим два раза по коду
                // 1 - стандартная карточка
                // 2 - карточка по приказу

                for (int index = 1; index <= 2; index++)
                {
                    if (saveType == 2 && index == 1) continue;
                    if (saveType == 1 && index == 2) continue;

                    // получаем все существующие стандарные карты для данного продукта
                    var all_kmh = from kmh in provider.Specification_1s
                                  where Object.Equals(kmh.OrderArticleID, index == 1 ? null : new Guid?(order_id))
                                  && kmh._Product_ID == card.prod_id
                                  select kmh;

                    // переносим полученные данные в карту
                    Specification_1 savedCard = new Specification_1();
                    savedCard.id = Guid.NewGuid();
                    savedCard.OrderArticleID = (index == 1 ? null : new Guid?(order_id));
                    LoadKmh(savedCard, card);

                    // устанавливаем время действия карты
                    savedCard.FinishDT = PlusInfinity;
                    if (all_kmh.Count() == 0)
                    {
                        // если других карт нету, даты от -∞ до +∞
                        // savedCard.StartDT = MinusInfinity;
                        savedCard.StartDT = CurDateTime;

                    }
                    else
                    {
                        // если другие карты есть, дата от CurDateTime+1 до +∞
                        savedCard.StartDT = CurDateTime;

                        // выбираем актуальные карты и завершаем дату их действия
                        List<Specification_1> actual_kmh = all_kmh.Where(c => c.StartDT <= CurDateTime && c.FinishDT > CurDateTime).ToList();
                        foreach (Specification_1 iter_kmh in actual_kmh)
                        {
                            iter_kmh.FinishDT = CurDateTime;
                        }
                    }

                    savedCard.dtle = CurDateTime;
                    try
                    {
                        savedCard.userID = (Guid)HttpContext.Current.Session["userID"];
                    }
                    catch { }
                    provider.Specification_1s.InsertOnSubmit(savedCard);
                }

                // Сохраняем изменения
                provider.SubmitChanges();
            }
            PostResult result = new PostResult("ok", 0) { TimeStamp = CurDateTime.ToUniversalTime() };
            return  result.ToString();
        }
Example #2
0
        public static string SaveAddMaterials(List<transfer_add> list, Guid prodid, int saveType, Guid order_id, Guid ste_id)
        {
            DateTime CurDateTime = DateTime.Now;

            // saveType == 1 (сохранить как основную)
            // saveType == 2 (сохранить как приказную)
            // saveType == 3 (как приказную и как основную)

            using (ProductProvider provider = new ProductProvider())
            {
                // {!} здесь может быть проблемное место, потому что надо оборачивать действия
                // в одну транзакцию

                // проходим два раза по коду
                // 1 - стандартная карточка
                // 2 - карточка по приказу
                for (int index = 1; index <= 2; index++)
                {
                    if (saveType == 2 && index == 1) continue;
                    if (saveType == 1 && index == 2) continue;

                    // получаем актуальные на текущий момент дополнительные материалы
                    var all_kmh = from kmh in provider.Specification_2s
                                  where Object.Equals(kmh.OrderArticleID, index == 1 ? null : new Guid?(order_id))
                                  && kmh._Product_ID == prodid
                                  && kmh._dictS_TEID == ste_id
                                  select kmh;

                    // перебераем только актуальные карты
                    // и завершаем их по текущей дате
                    foreach (var kmh in all_kmh.Where(it => it.StartDT <= CurDateTime && it.FinishDT > CurDateTime))
                    {
                        kmh.FinishDT = CurDateTime;
                    }

                    // если в списке нет доп. материалов, то вставляем
                    // специальный материал с Guid = {00000000-0000-0000-0000-000000000000}
                    if (list.Count == 0)
                    {
                        list.Add(new transfer_add()
                        {
                            material_id = Guid.Empty
                        });
                    }

                    // создаём новые карты материалов
                    foreach (transfer_add new_kmh in list)
                    {
                        provider.Specification_2s.InsertOnSubmit(new Specification_2()
                        {
                            id = Guid.NewGuid(),
                            _Product_ID = prodid,
                            _Material_ID = new_kmh.material_id,
                            // если данный материал уже применялся, то дата начинается с текущего момента
                            // если же данный материал добавлен впервые то дата начаинается с -∞
                            // StartDT = all_kmh.Count(it => it._Material_ID == new_kmh.material_id) > 0 ? CurDateTime : MinusInfinity,
                            StartDT = CurDateTime,
                            FinishDT = PlusInfinity,
                            no = new_kmh.no,
                            _dictUMID = new_kmh.um_id,
                            _dictSID = new_kmh.s_id,
                            _dictS_TEID = ste_id,
                            OrderArticleID = (index == 1 ? null : new Guid?(order_id))
                        });
                    }

                }

                // Сохраняем изменения
                provider.SubmitChanges();
            }
            PostResult result = new PostResult("ok", 0) { TimeStamp = CurDateTime.ToUniversalTime() };
            return result.ToString();
        }