예제 #1
0
        public static string RequestKmhCard(Guid prod_id, Guid order_id)
        {
            using (ProductProvider provider = new ProductProvider())
            {
                DateTime CurDateTime = DateTime.Now;
                Product prod = provider.GetProduct(prod_id);
                transfer tran = new transfer() { prod_id = prod._dictNomenID.Value };

                #region filling kmh card
                if (Guid.Empty.Equals(order_id))
                {
                    var actual_kmh = from kmh in provider.Specification_1s
                                     where kmh.OrderArticleID == null // стандарные (не приказные)
                                     && kmh.StartDT <= CurDateTime // на текущую дату
                                     && kmh.FinishDT > CurDateTime
                                     && kmh._Product_ID == prod._dictNomenID
                                     select kmh;

                    if (actual_kmh.Count() > 0)
                    {
                        FillKmh(actual_kmh.First(), tran, CurDateTime);
                        tran.prod_pn2 = actual_kmh.First().Product.superpole;
                    }
                    else
                    {
                        // создание новой КМХ для продукта
                        tran.prod_id = prod._dictNomenID.Value;
                        tran.prod_pn2 = prod._dictNomen.superpole;
                    }
                }
                else
                {
                    Product order_unit = provider.GetActualOrderProduct(order_id);
                    Specification_1 actual_kmh = null;

                    // пытаемся получить КМХ для данного приказа
                    try
                    {
                        actual_kmh = (from kmh in provider.Specification_1s
                                      where kmh.OrderArticleID == order_id // стандарные (не приказные)
                                      && kmh.StartDT <= CurDateTime // на текущую дату
                                      && kmh.FinishDT > CurDateTime
                                      && kmh._Product_ID == prod._dictNomenID
                                      select kmh).Single();
                    }
                    catch
                    {
                        // пытаемся получить КМХ на момент создания сборки
                        try
                        {
                            var actual_date = (from dates in provider.TechnDates
                                               where dates.OrderArticleID == order_id
                                               && dates._dictNomenID == prod._dictNomenID
                                               select dates.gen_date).SingleOrDefault();
                            if (actual_date == null) actual_date = order_unit.CreatedDate;

                            actual_kmh = (from kmh in provider.Specification_1s
                                          where kmh.OrderArticleID == null // стандарные (не приказные)
                                          && kmh.StartDT <= actual_date
                                          && kmh.FinishDT > actual_date
                                          && kmh._Product_ID == prod._dictNomenID
                                          select kmh).Single();
                        }
                        catch
                        {
                        }
                    }

                    if (actual_kmh == null)
                    {
                        // создание новой КМХ для продукта
                        tran.prod_id = prod._dictNomenID.Value;
                        tran.prod_pn2 = prod._dictNomen.superpole;
                    }
                    else
                    {
                        // заполняем карточку
                        FillKmh(actual_kmh, tran, CurDateTime);
                        tran.prod_pn2 = actual_kmh.Product.superpole;
                    }
                }
                #endregion

                Guid userID = (Guid)HttpContext.Current.Session["userID"];
                List<Guid> userRoles = (from role in provider.UserRoles
                                        where role.UserID == userID
                                        select role.RoleID).ToList();

                var permisions = (from perm in provider.RoleViewPermissions
                                 where perm.PermissionEntityID == new Guid("11F1BC17-20FB-4E93-8389-A55BFA4CA251") // EditorKMH
                                 && userRoles.Contains(perm.RoleID)
                                 && perm.Read
                                 select perm.EntityID).Distinct();

                tran.enabled_fields.AddRange(permisions);

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                return serializer.Serialize(tran);
            }
        }