private string createExportVendorProductSqlQuery(ExportVendorProduct model)
        {
            var sqlQuery = string.Empty;

            if (model.IsAllProductItems)
            {
                var whereSb = new StringBuilder();
                if (!string.IsNullOrEmpty(model.SearchString))
                {
                    whereSb.AppendFormat("(vendorproducts.EisSupplierSKU LIKE \'%{0}%\' OR vendorproducts.SupplierSKU LIKE \'%{0}%\' OR vendorproducts.Category LIKE \'%{0}%\' OR vendorproducts.Name LIKE \'%{0}%\') AND ", model.SearchString.Replace("_", "\\_"));
                }

                whereSb.Append("(@VendorId = -1 OR  vendorproducts.VendorId = @VendorId) ");
                whereSb.Append("AND (@CompanyId = -1 OR  vendors.CompanyId = @CompanyId) ");
                whereSb.Append("AND ((@QuantityFrom = -1 OR @QuantityTo = -1) OR (vendorproducts.Quantity >= @QuantityFrom AND vendorproducts.Quantity <= @QuantityTo)) ");

                // add criteria if we want to include EisSKU links
                if (model.IsWithEisSKULink)
                {
                    whereSb.AppendFormat("AND vendorproducts.EisSupplierSKU {0} IN (SELECT DISTINCT EisSupplierSKU FROM vendorproductlinks WHERE IsActive = 1) ", (model.WithEisSKULink == 1 ? "" : "NOT"));
                }

                // add criteria if it's we want to include images
                if (model.IsWithImages)
                {
                    whereSb.Append(string.Format(" AND vendorproducts.EisSupplierSKU {0} IN (SELECT DISTINCT EisSupplierSKU FROM vendorproductimages) ", model.WithImages == 1 ? "" : "NOT"));
                }


                sqlQuery = string.Format(@"SELECT vendorproducts.EisSupplierSKU,vendorproducts.VendorId, {0} 
                                FROM vendorproducts vendorproducts 
                                INNER JOIN vendors vendors ON vendors.Id = vendorproducts.VendorId
                                WHERE {1} {2}",
                                         string.Join(",", model.ProductFieldsArr),
                                         whereSb.ToString(),
                                         (string.IsNullOrEmpty(model.SortBy) ? string.Empty : ("ORDER BY " + model.SortBy)));
            }
            else // only selected vendor product's EisSupplierSKUs
            {
                sqlQuery = string.Format(@"SELECT vendorproducts.EisSupplierSKU,vendorproducts.VendorId,{0}
                                FROM vendorproducts vendorproducts
                                INNER JOIN vendors vendors ON vendors.Id = vendorproducts.VendorId
                                WHERE vendorproducts.EisSupplierSKU IN ('{1}') {2}",
                                         string.Join(",", model.ProductFieldsArr),
                                         string.Join("','", model.SelectedEisSKUsArr),
                                         (string.IsNullOrEmpty(model.SortBy) ? string.Empty : ("ORDER BY " + model.SortBy)));
            }

            return(sqlQuery);
        }
Example #2
0
        public ActionResult CustomExportVendorProducts(ExportVendorProduct model)
        {
            var fileName = _exportDataService.CustomExportVendorProducts(model);
            var fileInfo = new FileInfo(fileName);

            Response.Clear();
            Response.ContentType = "text/csv";
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-disposition", string.Format("attachment; filename=\"{0:MM}{0:dd}{0:yyyy}-{0:HH}{0:mm}{0:ss}_ExportVendorProducts.csv\"", model.RequestedDate));
            Response.TransmitFile(fileInfo.FullName);
            Response.Flush();
            Response.End();

            return(null);
        }
        private List <vendorproductlink> getVendorProductLinks(ExportVendorProduct model)
        {
            if (!model.IsIncludeEisSKULinks)
            {
                return(null);
            }

            if (model.IsAllProductItems)
            {
                return(_context.vendorproductlinks.Where(x => x.IsActive).ToList());
            }
            else
            {
                return(_context.vendorproductlinks
                       .Where(x => model.SelectedEisSKUsArr.Contains(x.EisSupplierSKU) && x.IsActive)
                       .ToList());
            }
        }
        private List <vendorproductimage> getVendorProductImages(ExportVendorProduct model)
        {
            var images = new List <vendorproductimage>();

            //if (!model.IsIncludeImages)
            //    return null;

            if (model.IsAllProductItems)
            {
                images = _context.vendorproductimages.ToList();
            }
            else
            {
                images = _context.vendorproductimages.Where(x => model.SelectedEisSKUsArr.Contains(x.EisSupplierSKU)).ToList();
            }

            return(images);
        }
        public string CustomExportVendorProducts(ExportVendorProduct model)
        {
            var parameters = new Dictionary <string, object>
            {
                { "@VendorId", model.VendorId == null ? -1 : model.VendorId },
                { "@CompanyId", model.CompanyId == null ? -1 : model.CompanyId },
                { "@QuantityFrom", model.QuantityFrom == null ? -1 : model.QuantityFrom },
                { "@QuantityTo", model.QuantityTo == null ? -1 : model.QuantityTo },
            };

            var filePath = string.Format("{1}\\{0:MM}{0:dd}{0:yyyy}-{0:HH}{0:mm}{0:ss}_ExportVendorProducts.csv", model.RequestedDate, _exportFolder);

            try
            {
                using (var streamWriter = new StreamWriter(filePath))
                {
                    using (var conn = new MySqlConnection(_connectionString))
                    {
                        var reader      = MySqlHelper.ExecuteReader(conn, CommandType.Text, createExportVendorProductSqlQuery(model), parameters);
                        var eisSKULinks = getVendorProductLinks(model);

                        var productImages = getVendorProductImages(model);

                        var config = new CsvConfiguration {
                            Delimiter = model.Delimiter
                        };
                        var csvWriter = new CsvWriter(streamWriter, config);

                        // write the header text for the CSV files
                        foreach (var field in model.ProductFieldsArr)
                        {
                            var headerName = removePrefixTable(field, true);
                            csvWriter.WriteField(headerName.FileHeaderName);
                        }

                        // write the column headers for the EisSKU links; ATLEAST 5 - NEED TO REFACTOR THIS ONE
                        if (model.IsIncludeEisSKULinks)
                        {
                            for (var i = 1; i <= 5; i++)
                            {
                                csvWriter.WriteField(string.Format("EisSKU_{0}", i));
                            }
                        }
                        // write the column headers for the product's images
                        if (model.IsIncludeImages)
                        {
                            for (var i = 1; i <= 5; i++)
                            {
                                csvWriter.WriteField(string.Format("ImageUrl{0}", i));
                            }
                        }
                        csvWriter.NextRecord();

                        while (reader.Read())
                        {
                            // write the vendor product results
                            foreach (var field in model.ProductFieldsArr)
                            {
                                var headerName = removePrefixTable(field);
                                csvWriter.WriteField(reader[headerName.DbColumnName]);
                            }

                            // write the EisSKU links
                            if (model.IsIncludeEisSKULinks)
                            {
                                // get the EIS SKU
                                var eisSupplierSKU = reader["EisSupplierSKU"].ToString();
                                var links          = eisSKULinks.Where(x => x.EisSupplierSKU == eisSupplierSKU).ToList();
                                foreach (var link in links)
                                {
                                    csvWriter.WriteField(link.EisSKU);
                                }
                            }
                            if (model.IsIncludeImages)
                            {
                                var eisSku = reader["EisSupplierSKU"].ToString();
                                var images = productImages.Where(x => x.EisSupplierSKU == eisSku).ToList();

                                for (var i = 0; i < images.Count && i < 5; i++)
                                {
                                    csvWriter.WriteField(_imageHelper.GetVendorProductImageUri(eisSku, images[i].FileName));
                                }
                            }
                            csvWriter.NextRecord();
                        }
                    }
                }

                _logger.Add(LogEntrySeverity.Information, LogEntryType.ExportDataService, "Vendor products have been successfully exported -> " + filePath);
                return(filePath);
            }
            catch (Exception ex)
            {
                _logger.Add(LogEntrySeverity.Error, LogEntryType.ExportDataService,
                            string.Format("Error in custom export vendor product file. <br/> Error message: {0}", EisHelper.GetExceptionMessage(ex)),
                            ex.StackTrace);
                throw ex;
            }
        }