Beispiel #1
0
        public ActionResult DocumentEditRows(ProductLine editedItem)
        {
            // Get the grid and database models
            var gridModel = new SkladJqGridModel();
            var datacontextModel = new SkladDataContext();

            int documentId = -1;
            // If we are in "Edit" mode

            if (gridModel.ProductLineGrid.AjaxCallBackMode == AjaxCallBackMode.EditRow)
            {
                // Get the data from and find the item corresponding to the edited row
                ProductLine item = (from x in datacontextModel.ProductLines
                                    where x.ProductLineId == editedItem.ProductLineId
                                    select x).First<ProductLine>();

                // update the Order information
                UpdateProductLine(item, editedItem);

                // save comment to iriginal product item description
                var product = datacontextModel.Products.Where(x => x.ProductId == item.ProductId).FirstOrDefault();
                if (product != null)
                {
                    if (String.IsNullOrEmpty(product.Description))
                    { product.Description = editedItem.Comment; }
                    else if (product.Description.IndexOf(editedItem.Comment) == -1)
                    {
                        product.Description += ". " + editedItem.Comment;
                    }
                    else
                        product.Description = editedItem.Comment;
                }

                documentId = item.DocumentId;
                datacontextModel.SaveChanges();
            }

            if (gridModel.ProductLineGrid.AjaxCallBackMode == AjaxCallBackMode.DeleteRow)
            {
                ProductLine item = (from x in datacontextModel.ProductLines
                                    where x.ProductLineId == editedItem.ProductLineId
                                    select x)
                               .First<ProductLine>();
                documentId = item.DocumentId;
                // delete the record
                datacontextModel.ProductLines.Remove(item);
                datacontextModel.SaveChanges();
            }

            var document = datacontextModel.Documents.Where(x => x.DocumentId == documentId).FirstOrDefault();

            if (document != null)
            {
                document.IsReportOutdated = true;
                datacontextModel.SaveChanges();
            }

            // Add
            //DocumentOperation operation = new DocumentOperation();
            //operation.UpdateDocument(datacontextModel, documentId);

            return RedirectToAction("Document", "Home", new { documentId = documentId });
        }
Beispiel #2
0
        public ActionResult Document(IEnumerable<HttpPostedFileBase> files, int? documentId,
            int doctypeId)
        {
            int? contractorId =null;

            string contractorIdStr = Request.Params["contractorId"].ToString();

            if (!String.IsNullOrEmpty(contractorIdStr))
            {
                int contractorIdInt = 0;
                Int32.TryParse(contractorIdStr, out contractorIdInt);
                if (contractorIdInt <= 0)
                    return Json(new { message = "Сначала выберите контрагента!", documentId = -1 });
                contractorId = contractorIdInt;
            }

            string docNumber = Request.Params["docNumber"];
            DateTime docCreatedOf = DateTime.Now;

            if(Request.Params["docCreatedOf"] != null)
            {
                docCreatedOf = Convert.ToDateTime(Request.Params["docCreatedOf"].ToString());
            }

            foreach (var file in files)
            {
                if (file.ContentLength > 0)
                {
                    //Stream uploadFileStream = file.InputStream;

                    // If the file uploaded is "XLSX", convert it's Sheet1 to a NPOI document
                    if (file.FileName.EndsWith("xlsx"))
                    {
                        //logger.InfoFormat("Загружается файл:{0}", file.FileName);

                        string extension = ".xlsx";
                        string uploadsPath = Server.MapPath("~/uploads");
                        var filename = Path.Combine(uploadsPath, Session.LCID.ToString() + extension);
                        if (!Directory.Exists(uploadsPath))
                        {
                            Directory.CreateDirectory(uploadsPath);
                        }

                        file.SaveAs(filename);
                        //logger.InfoFormat("Загружен файл:{0}", filename);

                        var products = ExcelHelper.GetProductsData(filename, extension, "ProductLine-Template");

                        if (products != null)
                        {
                            // TODO: dublicated code. Merge with code in AddNewProductLine() method
                            var datacontextModel = new SkladDataContext();

                            // Add DocumentId if null
                            Document document = null;

                            if (documentId == null || documentId <= 0)
                            {
                                DocumentOperation docOp = new DocumentOperation();

                                docNumber = String.IsNullOrEmpty(docNumber) ?
                                    docOp.GetDocumentNumber(datacontextModel, DateTime.Now.Year, doctypeId).ToString()
                                    : docNumber.Trim().Replace(" ", "");

                                string secureFolderName = GenerateFolderName(String.Empty);
                                string commonFolderName = GenerateFolderName(secureFolderName);
                                // Create new document
                                document = new Document
                                {
                                    DocumentTypeId = doctypeId,
                                    CreatedOf = docCreatedOf,
                                    Comment = String.Empty,
                                    CreatedAt = DateTime.Now,
                                    Number = docNumber,
                                    IsCommitted = false,
                                    SecureFolderName = secureFolderName,
                                    CommonFolderName = commonFolderName,
                                    IsReportOutdated = true,
                                };
                                datacontextModel.Documents.Add(document);
                                datacontextModel.SaveChanges();

                                document = datacontextModel.Documents.Where(x => x.Number == docNumber &&
                                    x.DocumentTypeId == doctypeId
                                    && x.CreatedAt.Year == document.CreatedAt.Year
                                    && x.CreatedAt.Month == document.CreatedAt.Month
                                    && x.CreatedAt.Day == document.CreatedAt.Day
                                    && x.CreatedAt.Hour == document.CreatedAt.Hour
                                    && x.CreatedAt.Minute == document.CreatedAt.Minute).FirstOrDefault();
                            }
                            else
                            {
                                document = datacontextModel.Documents.Where(x => x.DocumentId == documentId).FirstOrDefault();
                            }

                            if (document == null)
                                return Json(new { message = String.Format("Не найден документ {0}!", documentId), documentId = -1 });

                            var contractor = datacontextModel.Contractors.Where(x => x.ContractorId == contractorId).FirstOrDefault();

                            if (contractor == null)
                                return Json(new { message = String.Format("Не найден контрагент {0}!", contractorId), documentId = -1 });

                            foreach (var productLine in products)
                            {
                                string article = productLine.ProductArticle.Trim().ToLower().Replace(" ", "");

                                var supplier = datacontextModel.Contractors.Where(x => x.Code == productLine.SupplierCode.Trim() &&
                                        x.ContractorTypeId == (int)EntityEnum.ContractorTypeEnum.Factory).FirstOrDefault();

                                if (supplier == null)
                                    return Json(new { message = String.Format("Фабрика {0} не найдена!", productLine.SupplierCode.Trim()), documentId = -1 });

                                decimal marginAbs = 0;

                                if (productLine.MarginAbs > 0)
                                    marginAbs = productLine.MarginAbs;
                                else if (productLine.SalePrice > 0)
                                {
                                    marginAbs = Math.Abs(productLine.SalePrice - productLine.PurchasePrice);

                                    if (marginAbs == 0)
                                        marginAbs = contractor.MarginAbs;
                                }
                                else
                                    marginAbs = contractor.MarginAbs;

                                Product product = GetOrCreateProduct(datacontextModel,
                                    supplier.ContractorId,
                                    productLine.PurchasePrice,
                                    marginAbs,
                                    article, String.Empty);

                                // Check if this productline already exists in document. if so, just
                                // change it value
                                ProductLine line = datacontextModel.ProductLines.Where(x => x.ProductId == product.ProductId &&
                                    x.DocumentId == document.DocumentId).FirstOrDefault();

                                string comment = productLine.Comment;
                                if (comment != null)
                                    comment = comment.Trim();

                                if (line == null)
                                {
                                    // Attach productLine to document
                                    line = new ProductLine
                                    {
                                        ProductArticle = article,
                                        SupplierCode = supplier.Code,
                                        SupplierId = supplier.ContractorId,
                                        Quantity = productLine.Quantity,
                                        PurchasePrice = productLine.PurchasePrice,
                                        SalePrice = productLine.PurchasePrice + marginAbs,
                                        MarginAbs = marginAbs,
                                        Discount = productLine.Discount,
                                        Comment = comment,
                                        ProductId = product.ProductId,
                                        DocumentId = document.DocumentId,
                                        Sum = productLine.Quantity * productLine.PurchasePrice,
                                        SaleSum = productLine.Quantity * (productLine.PurchasePrice + marginAbs)
                                    };

                                    if (document.Products == null)
                                        document.Products = new List<ProductLine>();

                                    document.Products.Add(line);
                                }
                                else
                                {
                                    line.ProductArticle = article;
                                    line.SupplierCode = supplier.Code;
                                    line.SupplierId = supplier.ContractorId;
                                    line.Quantity = productLine.Quantity;
                                    line.PurchasePrice = productLine.PurchasePrice;
                                    line.SalePrice = productLine.PurchasePrice + marginAbs;
                                    line.MarginAbs = marginAbs;
                                    line.Comment = comment;
                                    line.Discount = productLine.Discount;
                                    line.ProductId = product.ProductId;
                                    line.Sum = productLine.Quantity * productLine.PurchasePrice;
                                    line.SaleSum = productLine.Quantity * (productLine.PurchasePrice + marginAbs);
                                }
                                document.IsReportOutdated = true;
                                datacontextModel.SaveChanges();
                            }

                            document.IsReportOutdated = true;
                            datacontextModel.SaveChanges();

                            return Json(new { message = "Документ успешно обновлен/добавлен", documentId = document.DocumentId });
                        }
                    }
                    else
                    {
                        return Json(new { message = "Вы можете загружать только файлы Excel 2007-2010!", documentId = -1 });
                    }
                }
            }
            return Json(new { message = "Возникла критическая ошибка!", documentId = -1 });
        }
Beispiel #3
0
        public int AddNewProductLine(int? documentId, int doctypeId, string docNumber,
            DateTime docCreatedOf, string docComment,
            int supplierId,
            string article,
            decimal purchaseprice, decimal marginabs, decimal discount, int quantity, int quantityW, string comment)
        {
            if (supplierId <= 0 || String.IsNullOrEmpty(article) || purchaseprice < 0
                || doctypeId <= 0
                )
                return -1;

            var datacontextModel = new SkladDataContext();
            // check for valid supplier
            var supplier = datacontextModel.Contractors.Where(x => x.ContractorId == supplierId &&
                x.ContractorTypeId == (int)EntityEnum.ContractorTypeEnum.Factory).FirstOrDefault();

            if (supplier == null)
                return -1;

            article = article.Trim().Replace(" ","").ToLower();
            comment = comment.Trim();
            // get product
            Product product = GetOrCreateProduct(datacontextModel, supplierId, purchaseprice, marginabs, article, comment);

            // Add DocumentId if null
            Document document = null;

            if (documentId == null || documentId <= 0)
            {
                DocumentOperation docOp = new DocumentOperation();

                docNumber = String.IsNullOrEmpty(docNumber) ?
                    docOp.GetDocumentNumber(datacontextModel, DateTime.Now.Year, doctypeId).ToString()
                    : docNumber.Trim().Replace(" ", "");

                string secureFolderName = GenerateFolderName(String.Empty);
                string commonFolderName = GenerateFolderName(secureFolderName);
                // Create new document
                document = new Document
                {
                    DocumentTypeId = doctypeId,
                    CreatedOf = docCreatedOf,
                    Comment = docComment,
                    CreatedAt = DateTime.Now,
                    Number = docNumber,
                    IsCommitted = false,
                    SecureFolderName = secureFolderName,
                    CommonFolderName = commonFolderName,
                    IsReportOutdated = true,
                };
                datacontextModel.Documents.Add(document);
                datacontextModel.SaveChanges();

                document = datacontextModel.Documents.Where(x => x.Number == docNumber &&
                    x.DocumentTypeId == doctypeId
                    && x.CreatedAt.Year == document.CreatedAt.Year
                    && x.CreatedAt.Month == document.CreatedAt.Month
                    && x.CreatedAt.Day == document.CreatedAt.Day
                    && x.CreatedAt.Hour == document.CreatedAt.Hour
                    && x.CreatedAt.Minute == document.CreatedAt.Minute).FirstOrDefault();
            }
            else
            {
                document = datacontextModel.Documents.Where(x => x.DocumentId == documentId).FirstOrDefault();
            }

            if (document == null)
            {
                logger.ErrorFormat("Ошибка создания документа № {0} от {1}", docNumber, docCreatedOf);
                return -1;
            }

            document.IsReportOutdated = true;

            // Check if this productline already exists in document. if so, just
            // change it value
            ProductLine line = datacontextModel.ProductLines.Where(x => x.ProductId == product.ProductId &&
                 x.DocumentId == document.DocumentId).FirstOrDefault();

            string productComment = comment;
              //  int productQuantity = quantity;
            if (quantityW > 0)
            {
                productComment += "со склада [" + quantityW + "] ед. ";
            }

            if (line == null)
            {
                // Attach productLine to document
                line = new ProductLine
                {
                    ProductArticle = article,
                    SupplierCode = supplier.Code,
                    SupplierId = supplier.ContractorId,
                    Quantity = quantity + quantityW,
                    PurchasePrice = purchaseprice,
                    SalePrice = purchaseprice + marginabs,
                    MarginAbs = marginabs,
                    Discount = discount,
                    Comment = productComment,
                    ProductId = product.ProductId,
                    DocumentId = document.DocumentId,
                    Sum = (quantity + quantityW) * purchaseprice,
                    SaleSum = (quantity + quantityW) * (purchaseprice + marginabs)
                };

                if (document.Products == null)
                    document.Products = new List<ProductLine>();

                document.Products.Add(line);
            }
            else
            {
                line.ProductArticle = article;
                line.SupplierCode = supplier.Code;
                line.SupplierId = supplier.ContractorId;
                line.Quantity = quantity + quantityW;
                line.PurchasePrice = purchaseprice;
                line.MarginAbs = marginabs;
                line.Discount = discount;
                line.SalePrice = purchaseprice + marginabs;
                line.Comment = productComment;
                line.ProductId = product.ProductId;
                line.Sum = (quantity + quantityW) * purchaseprice;
                line.SaleSum = (quantity + quantityW) * (purchaseprice + marginabs);
            }

            // обновить документы оприходования где имеется этот товар
            RemoveProductFromPostingDocument(datacontextModel, product.ProductId, quantityW);

            datacontextModel.SaveChanges();

            return document.DocumentId;
        }
Beispiel #4
0
 private void UpdateProductLine(ProductLine item, ProductLine editedItem)
 {
     item.PurchasePrice = editedItem.PurchasePrice;
     item.SalePrice = editedItem.PurchasePrice + editedItem.MarginAbs;
     item.MarginAbs = editedItem.MarginAbs;
     item.Quantity = editedItem.Quantity;
     item.Discount = editedItem.Discount;
     item.Comment = (editedItem.Comment ?? String.Empty).Trim();
     item.Sum = editedItem.Quantity * editedItem.PurchasePrice;
     item.SaleSum = editedItem.Quantity * (editedItem.PurchasePrice + editedItem.MarginAbs);
 }