Example #1
0
        /// <summary>
        /// Disables all tabs in the Dynamic Tabs list, then reenables tabs according to the users role
        /// </summary>
        private void SetTabVisibility()
        {
            try {
                // Get the current record using the entity context service.
                if (EntityService != null) {
                    if (EntityService.EntityID != null) {
                        ISalesOrder salesOrder = EntityFactory.GetById<ISalesOrder>(EntityService.EntityID.ToString());
                        if (salesOrder != null) {
                            if (PageWorkItemLocator != null) {
                                // These 2 lines get the tab collection for the page.
                                PageWorkItem workItem = PageWorkItemLocator.GetPageWorkItem();
                                if (workItem != null) {
                                    TabWorkspace tabWorkspace = workItem.Workspaces["TabControl"] as TabWorkspace;
                                    if (tabWorkspace != null) {

                                        if (salesOrder.Account != null) {
                                            if (salesOrder.Account.Type == "Distributor") {
                                                //Show the Reciept of goods tab
                                                tabWorkspace.Hide("ReceiptOfGoodsGrid", false);

                                            } else {
                                                //Hide the Reciept of goods tab
                                                tabWorkspace.Hide("ReceiptOfGoodsGrid", true);
                                            }
                                        }

                                        //show/hide the product tabs
                                        switch (salesOrder.OrderType) {
                                            case ("Sales Order"):
                                                tabWorkspace.Hide("SalesOrderProducts", false);
                                                tabWorkspace.Hide("ReturnProductsGrid", true);
                                                tabWorkspace.Hide("TransferProductsGrid", true);
                                                break;
                                            case ("Purchase Order"):
                                                tabWorkspace.Hide("SalesOrderProducts", false);
                                                tabWorkspace.Hide("ReturnProductsGrid", true);
                                                tabWorkspace.Hide("TransferProductsGrid", true);
                                                break;
                                            case ("Transfer Order"):
                                                tabWorkspace.Hide("SalesOrderProducts", true);
                                                tabWorkspace.Hide("ReturnProductsGrid", true);
                                                tabWorkspace.Hide("TransferProductsGrid", false);
                                                break;
                                            case ("Return Order"):
                                                tabWorkspace.Hide("SalesOrderProducts", true);
                                                tabWorkspace.Hide("ReturnProductsGrid", false);
                                                tabWorkspace.Hide("TransferProductsGrid", true);
                                                break;
                                            case ("Inventory Order"):
                                                tabWorkspace.Hide("SalesOrderProducts", false);
                                                tabWorkspace.Hide("ReturnProductsGrid", true);
                                                tabWorkspace.Hide("TransferProductsGrid", true);
                                                break;
                                            default:
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } catch (Exception e) {
                Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                eh.HandleException(e, false);
            }
        }
        public static void AddStockcardProducts(ISalesOrder salesorder)
        {
            try {
                //Only add products if the account is specified
                if (salesorder.Account != null) {

                    //save the salesorder
                    salesorder.Save();

                    //get the user's warehouseid, the id may not match the object reference, use the id as correct
                    String userWarehouseID = "";
                    if (String.IsNullOrEmpty(salesorder.UserWHSEID) && salesorder.UserWareHouse != null) {
                        userWarehouseID = salesorder.UserWareHouse.SiteCodeId;
                    } else if (salesorder.UserWHSEID == salesorder.UserWareHouse.Id.ToString()) {
                        userWarehouseID = salesorder.UserWareHouse.SiteCodeId;
                    } else {
                        //lookup id from site
                        Sage.Entity.Interfaces.ISLXSite _UserWareHouse =
                            Sage.Platform.EntityFactory.GetById<Sage.Entity.Interfaces.ISLXSite>(salesorder.UserWHSEID);
                        if (_UserWareHouse != null) {
                            userWarehouseID = _UserWareHouse.SiteCodeId;
                        }
                    }

                    //List the stock card items
                    Sage.Platform.RepositoryHelper<Sage.Entity.Interfaces.IStockCardItems> f =
                        Sage.Platform.EntityFactory.GetRepositoryHelper<Sage.Entity.Interfaces.IStockCardItems>();
                    Sage.Platform.Repository.ICriteria crit = f.CreateCriteria();

                    crit.Add(f.EF.Eq("Accountid", salesorder.Account.Id.ToString()));
                    crit.CreateAlias("Product", "p");
                    crit.Add(f.EF.Eq("p.WarehouseID", userWarehouseID));
                    crit.Add(f.EF.Ne("p.Status", "Deleted"));

                    //result = crit.List<Sage.Entity.Interfaces.IPickingList>();
                    foreach (IStockCardItems scitem in crit.List<IStockCardItems>()) {
                        if (scitem.Product != null) {

                            ////Only add products in the selected warehouse
                            //if (!String.IsNullOrEmpty(userWarehouseID) && userWarehouseID == scitem.Product.WarehouseID) {
                            try {
                                //add the products to the salesorder
                                Sage.Entity.Interfaces.ISalesOrderItem item =
                                Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.ISalesOrderItem),
                                Sage.Platform.EntityCreationOption.DoNotExecuteBusinessRules) as Sage.Entity.Interfaces.ISalesOrderItem;

                                //use common function to add salesorderitem
                                item.SalesOrder = salesorder;
                                item.Product = scitem.Product;
                                item.MaxStockLevel = scitem.MaxStockLevel; //ssommerfeldt Nov 2 2012
                                item.SaveProductToSalesOrderItem();
                                item.Save();

                                salesorder.SalesOrderItems.Add(item);

                            } catch (Exception ex) {
                                //handle errors to allow other items to process
                                Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                                eh.HandleException(new Exception("Order (" + salesorder.SalesOrderNumber + "): " + ex.Message, ex), false);
                            }

                            ////get msrp price
                            //double listPrice = 0;
                            //try {
                            //    if (scitem.Product.Vproductpricesheet != null) {
                            //        listPrice = (double)scitem.Product.Vproductpricesheet.Listprice;
                            //    } else {
                            //        //price not found
                            //    }
                            //} catch (Exception ex) {
                            //    //vproductpricesheet record not found
                            //    Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                            //    eh.HandleException(new Exception("Order (" + item.SalesOrder.SalesOrderNumber + "): " + ex.Message, ex), false);
                            //}
                            ////item.Price = Math.Round((Double)scitem.Product.Price, 2, MidpointRounding.AwayFromZero);
                            //item.Price = listPrice;

                            ////get the margin
                            //item.Discount = scitem.Margin;

                            //item.ExtendedPrice = 0; //due to quantity 0
                            //item.Quantity = 0; //set to 0 initially

                            //item.ActualID = scitem.Product.ActualId;
                            //item.UPC = scitem.Product.UPC;
                            //item.Description = scitem.ProductDescription;
                            //item.Family = scitem.Product.Family;

                            //item.ProductName = scitem.Product.Name;
                            //item.Program = scitem.Product.Program;
                            //item.Case = scitem.Product.Unit;
                            //item.Product = scitem.Product;
                            //item.UnitOfMeasureId = scitem.Product.UnitOfMeasureId.Trim();
                            //item.MaxStockLevel = scitem.MaxStockLevel; //ssommerfeldt Nov 2 2012

                            //salesorder.SalesOrderItems.Add(item);
                            //item.Save();
                        }
                    }
                }
            } catch (Exception e) {
                throw new Exception("Order (" + salesorder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        public static void GetStockCardPricing(ISalesOrderItem salesorderitem)
        {
            try {
                // Set the pricing from stock card
                double listPrice = 0;
                try {
                    if (salesorderitem.Product != null) {
                        if (salesorderitem.Product.Vproductpricesheet != null) {
                            listPrice = (double)salesorderitem.Product.Vproductpricesheet.Listprice;
                        } else {
                            //price not found
                        }
                    }
                } catch (Exception ex) {
                    //vproductpricesheet record not found
                    Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                    eh.HandleException(new Exception("Order (" + salesorderitem.SalesOrder.SalesOrderNumber + "): " + ex.Message, ex), false);
                }

                Sage.Platform.RepositoryHelper<IStockCardItems> rep1 = Sage.Platform.EntityFactory.GetRepositoryHelper<IStockCardItems>();
                Sage.Platform.Repository.ICriteria crit1 = rep1.CreateCriteria();

                if (salesorderitem.SalesOrder != null) {
                    if (salesorderitem.SalesOrder.Account != null) {
                        crit1.Add(rep1.EF.Eq("Accountid", salesorderitem.SalesOrder.Account.Id));

                        if (salesorderitem.Product != null) {
                            crit1.Add(rep1.EF.Eq("Productid", salesorderitem.Product.Id));

                            double margin = 0;
                            foreach (IStockCardItems scard in crit1.List<IStockCardItems>()) {
                                margin = scard.Margin ?? 0;
                                break;
                            }

                            salesorderitem.Price = Math.Round(listPrice, 2);
                            salesorderitem.Discount = margin;
                            salesorderitem.CalculatedPrice = Math.Round((Decimal)listPrice - ((Decimal)listPrice * (Decimal)margin), 2, MidpointRounding.AwayFromZero);
                            salesorderitem.ExtendedPrice = Math.Round((Double)salesorderitem.CalculatedPrice * (Double)salesorderitem.Quantity, 2, MidpointRounding.AwayFromZero);
                            salesorderitem.UPC = salesorderitem.Product.UPC;

                            //Set a value on salesorder to recalculate totals on save
                            salesorderitem.SalesOrder.Tick = salesorderitem.SalesOrder.Tick + 1 ?? 1;
                        }
                    }
                }
            } catch (Exception e) {
                throw new Exception("Order (" + salesorderitem.SalesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
        public static void SaveProductToSalesOrderItem(ISalesOrderItem salesorderitem)
        {
            try {
                if (salesorderitem.Product != null) {

                    //exclude products that are already in the order, this is used for add only
                    var existsInOrder = from p in salesorderitem.SalesOrder.SalesOrderItems
                                        where p.ActualID.Equals(salesorderitem.Product.ActualId)
                                        select p;
                    if (existsInOrder.Count() > 0) {
                        //    //throw new Exception("Order already contains this product, use the edit function instead.");
                        //    //Modified 2014-1-10 PG
                        //    //If an existing item is requested, load values from salesorder

                        //salesorderitem.Quantity = 0; //don't change quantity
                    } else {
                        salesorderitem.Quantity = 0; //set to 0 initially
                    }

                    //item.SalesOrder = salesorder;
                    salesorderitem.ActualID = salesorderitem.Product.ActualId;
                    salesorderitem.Description = salesorderitem.Product.Description;
                    salesorderitem.Family = salesorderitem.Product.Family;
                    salesorderitem.UPC = salesorderitem.Product.UPC;

                    salesorderitem.ProductName = salesorderitem.Product.Name;
                    salesorderitem.Program = salesorderitem.Product.Program;
                    salesorderitem.UnitOfMeasureId = salesorderitem.Product.UnitOfMeasureId.Trim();
                    salesorderitem.Case = salesorderitem.Product.Unit;

                    ////get margin from category
                    //salesorderitem.Discount = 0;
                    //if (salesorderitem.SalesOrder != null) {
                    //    if (salesorderitem.SalesOrder.Account != null) {

                    //        String sql = "SELECT ACCOUNTPRODUCTCATEGORY.MARGIN";
                    //        sql += " FROM PRODUCT";
                    //        sql += " INNER JOIN TIMPRODCATITEM ON PRODUCT.MASITEMKEY = TIMPRODCATITEM.ITEMKEY";
                    //        sql += " INNER JOIN TIMPRODCATEGORY ON TIMPRODCATITEM.PRODCATEGORYKEY = TIMPRODCATEGORY.PRODCATEGORYKEY";
                    //        sql += " INNER JOIN ACCOUNTPRODUCTCATEGORY ON TIMPRODCATEGORY.TIMPRODCATEGORYID = ACCOUNTPRODUCTCATEGORY.PRODUCTCATEGORYID";
                    //        sql += " Where ProductId = '" + salesorderitem.Product.Id.ToString() + "'";
                    //        sql += " And AccountId = '" + salesorderitem.SalesOrder.Account.Id.ToString() + "'";

                    //        Sage.Platform.Data.IDataService datasvc = Sage.Platform.Application.ApplicationContext.Current.Services.Get<Sage.Platform.Data.IDataService>();
                    //        using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(datasvc.GetConnectionString())) {
                    //            conn.Open();
                    //            using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, conn)) {
                    //                OleDbDataReader reader = cmd.ExecuteReader();
                    //                //loop through the reader
                    //                while (reader.Read()) {
                    //                    try {
                    //                        salesorderitem.Discount = (Double)reader["MARGIN"];
                    //                    } catch (Exception) {
                    //                        //no catch?
                    //                        salesorderitem.Discount = 0;
                    //                    }
                    //                }
                    //                reader.Close();
                    //            }
                    //        }
                    //    }
                    //}

                    //Get margin from extension method
                    double margin = 0;
                    if (salesorderitem.Product.Timprodpricegroup != null
                        && salesorderitem.SalesOrder != null
                        && salesorderitem.SalesOrder.Account != null) {

                        Extentions.GetDefaultMargin(null,
                                                salesorderitem.Product.Timprodpricegroup.Id.ToString(),
                                                salesorderitem.SalesOrder.Account,
                                                out margin);
                    }
                    salesorderitem.Discount = margin;

                    //get msrp price
                    double listPrice = 0;
                    try {
                        if (salesorderitem.Product != null) {
                            if (salesorderitem.Product.Vproductpricesheet != null) {
                                listPrice = (double)salesorderitem.Product.Vproductpricesheet.Listprice;
                            } else {
                                //price not found
                            }
                        }
                    } catch (Exception ex) {
                        //vproductpricesheet record not found
                        Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                        eh.HandleException(new Exception("Order (" + salesorderitem.SalesOrder.SalesOrderNumber + "): " + ex.Message, ex), false);
                    }
                    salesorderitem.Price = Math.Round(listPrice, 2);

                    if (salesorderitem.SalesOrder.OrderType == "Return Order") {

                        if (salesorderitem.SalesOrder.Account != null) {

                            //find the new item, id is the same as return except last char
                            double newProductPrice = 0;
                            double returnmargin = 0;
                            try {
                                IProduct newProduct = FindProductByReturnProduct(salesorderitem.Product, salesorderitem.SalesOrder.Account);

                                if (newProduct.Vproductpricesheet != null) {
                                    newProductPrice = (double)newProduct.Vproductpricesheet.Listprice;
                                } else {
                                    //price not found
                                }

                                if (newProduct.Timprodpricegroup != null
                                && salesorderitem.SalesOrder != null
                                && salesorderitem.SalesOrder.Account != null) {

                                    Extentions.GetDefaultMargin(null,
                                                            newProduct.Timprodpricegroup.Id.ToString(),
                                                            salesorderitem.SalesOrder.Account,
                                                            out returnmargin);
                                }

                            } catch (Exception ex) {
                                //vproductpricesheet record not found
                                Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
                                eh.HandleException(new Exception("Order (" + salesorderitem.SalesOrder.SalesOrderNumber + "): " + ex.Message, ex), false);
                            }
                            //return item price is new item price - return item price
                            salesorderitem.OrigProductPrice = Math.Round(newProductPrice, 2);

                            //Get return margin from extension method
                            salesorderitem.OrigProductDiscount = returnmargin;

                        }
                    }

                    //calculate the adjusted and extended prices
                    salesorderitem.CalculatedPrice = CalculateAdjustedPrice(salesorderitem);
                    CalculateExtendedPrice(salesorderitem);

                }
                //}
            } catch (Exception e) {
                throw new Exception("Order (" + salesorderitem.SalesOrder.SalesOrderNumber + "): " + e.Message, e);
            }
        }
    private void AddExpensesToAttendees()
    {
        try {
            //Add expenses to the attendees listed. Expenses are split equally.
             int attendeeCount = 0;
             if (Activity.ActivityAttendees != null) {
                 attendeeCount = Activity.ActivityAttendees.Count;
             }
            bool isContactIncluded = false;
            if (String.IsNullOrEmpty(Activity.ContactId) == false) {
                attendeeCount += 1;
                isContactIncluded = true;
            }

            foreach (IActivityExpense exp in Activity.ActivityExpenses) {

                //determine the expense amount
                decimal dividedAmount = 0;
                decimal originalAmount = exp.Amount ?? 0;
                if (attendeeCount > 1) {
                    dividedAmount = originalAmount / attendeeCount;
                } else {
                    dividedAmount = originalAmount;
                }

                foreach (IActivityAttendee a in Activity.ActivityAttendees) {
                    //create expense record
                    Sage.Entity.Interfaces.IContactExpenses newExpense =
                        Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IContactExpenses),
                        Sage.Platform.EntityCreationOption.ExecuteBusinessRules) as Sage.Entity.Interfaces.IContactExpenses;

                    newExpense.Ah_rep = exp.AHRep;
                    newExpense.ExpenseAmount = (double)dividedAmount;
                    newExpense.ExpenseDate = exp.ExpenseDate;
                    newExpense.ExpenseType = exp.ExpenseType;
                    newExpense.ExpenseLocation = exp.Location;
                    newExpense.ExpenseNote = exp.Notes;
                    newExpense.PortfolioManager = exp.PortfolioManager;
                    newExpense.Contactid = a.ContactId;
                    newExpense.Save();
                }

                //create expense for activity contact
                if (isContactIncluded == true) {
                    //create expense record
                    Sage.Entity.Interfaces.IContactExpenses newExpense =
                        Sage.Platform.EntityFactory.Create(typeof(Sage.Entity.Interfaces.IContactExpenses),
                        Sage.Platform.EntityCreationOption.ExecuteBusinessRules) as Sage.Entity.Interfaces.IContactExpenses;

                    newExpense.Ah_rep = exp.AHRep;
                    newExpense.ExpenseAmount = (double)dividedAmount;
                    newExpense.ExpenseDate = exp.ExpenseDate;
                    newExpense.ExpenseType = exp.ExpenseType;
                    newExpense.ExpenseLocation = exp.Location;
                    newExpense.ExpenseNote = exp.Notes;
                    newExpense.PortfolioManager = exp.PortfolioManager;
                    newExpense.Contactid = Activity.ContactId;
                    newExpense.Save();
                }

            }
        } catch (Exception ex) {
            Sage.Platform.Application.Exceptions.EventLogExceptionHandler eh = new Sage.Platform.Application.Exceptions.EventLogExceptionHandler();
            eh.HandleException(ex, false);
        }
    }