Пример #1
0
        public MobileInitialData GetInitializeData(InitialRequestDetails userAuthenticationDetailsObj)
        {
            string            status            = string.Empty;
            string            message           = string.Empty;
            MobileInitialData mobileInitialData = null;

            try
            {
                bool isValidVersion = Helper.IsValidAppVersion(userAuthenticationDetailsObj.Version, out status);
                if (isValidVersion)
                {
                    int userId = int.Parse(Utils.DecryptStringAES(userAuthenticationDetailsObj.Token));
                    mobileInitialData = Helper.GetAllInitializeDataForUser(userId);
                    if (mobileInitialData == null)
                    {
                        mobileInitialData = new MobileInitialData();
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                status  = "ERROR";
                message = "Unknown error.";
            }
            if (mobileInitialData == null)
            {
                mobileInitialData = new MobileInitialData();
            }
            mobileInitialData.Status  = status;
            mobileInitialData.Message = message;
            return(mobileInitialData);
        }
Пример #2
0
        public ItemBriefDetails GetItemBriefDetails(ItemBriefRequestDetails itemBriefRequestDetails)
        {
            ItemBriefDetails itemBriefDetails = new Data.DataTypes.ItemBriefDetails();

            using (StageBitzDB dataContext = new StageBitzDB())
            {
                try
                {
                    ItemBriefBL itemBriefBL = new ItemBriefBL(dataContext);
                    ItemTypesBL itemTypesBL = new ItemTypesBL(dataContext);

                    Data.ItemBrief itemBrief = itemBriefBL.GetItemBrief(itemBriefRequestDetails.ItemBriefId);

                    int projectId = 0;
                    if (itemBrief != null)
                    {
                        projectId = itemBrief.ProjectId;
                    }

                    itemBriefDetails.CountryId = itemBriefBL.GetCountryIdByItemBriefId(itemBrief.ItemBriefId);

                    itemBriefDetails.ItemBriefInfo       = itemBriefBL.GetItemBriefInfoByItemBrief(itemBrief);
                    itemBriefDetails.IsReadOnly          = Support.IsReadOnlyRightsForProject(projectId, itemBriefRequestDetails.UserId);
                    itemBriefDetails.CanSeeBudgetSummary = Support.CanSeeBudgetSummary(itemBriefRequestDetails.UserId, projectId);
                    int itemTypeId = itemBriefRequestDetails.ItemTypeId.HasValue ?
                                     itemBriefRequestDetails.ItemTypeId.Value : itemBriefBL.GetItemBriefType(itemBriefRequestDetails.ItemBriefId).ItemTypeId;
                    itemBriefDetails.DisplayMarkUp   = itemTypesBL.GetItemTypeHTML(itemTypeId);
                    itemBriefDetails.ItemBriefValues = itemTypesBL.GetItemBriefFieldValues(itemBriefRequestDetails.ItemBriefId).Select(ibfv =>
                                                                                                                                       new ValuesInfo
                    {
                        Id            = ibfv.ItemBriefValueId,
                        FieldId       = ibfv.FieldId,
                        FieldOptionId = ibfv.FieldOptionId,
                        Value         = ibfv.Value
                    }).ToList();

                    int itemId = 0;
                    int userId = 0;

                    ItemBooking itemBooking = itemBriefBL.GetInUseItemBooking(itemBriefRequestDetails.ItemBriefId);
                    if (itemBooking != null)
                    {
                        itemId = itemBooking.ItemId;
                    }

                    userId = itemBriefRequestDetails.UserId;
                    ItemDetails itemDetails = itemTypesBL.GetItemDetails(itemId, itemBriefRequestDetails.ItemBriefId, userId, null, null, null);
                    if (itemDetails != null)
                    {
                        itemBriefDetails.ItemDetails = itemDetails;
                    }
                }
                catch (Exception ex)
                {
                    AgentErrorLog.HandleException(ex);
                }
                return(itemBriefDetails);
            }
        }
Пример #3
0
        public MobileImageDetails GetImageDetailsForItem(MobileItemImageRequestDetails mobileItemImageRequestDetails)
        {
            string             message            = string.Empty;
            string             status             = string.Empty;
            bool               isValidVersion     = true;
            MobileImageDetails mobileImageDetails = new MobileImageDetails();

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    isValidVersion = Helper.IsValidAppVersion(mobileItemImageRequestDetails.Version, out status);
                    if (isValidVersion)
                    {
                        //Check the user security
                        int userId = int.Parse(Utils.DecryptStringAES(mobileItemImageRequestDetails.Token));

                        if (Utils.CanAccessInventory(mobileItemImageRequestDetails.CompanyId, userId))
                        {
                            UtilityBL utilityBL = new UtilityBL(dataContext);

                            var dm = utilityBL.GetDocumentMedia(mobileItemImageRequestDetails.DocumentMediaId);

                            if (dm != null)
                            {
                                mobileImageDetails.DocumentMediaId = dm.DocumentMediaId;
                                mobileImageDetails.Image           = Convert.ToBase64String(dm.Thumbnail);
                                mobileImageDetails.Status          = "OK";
                            }
                            else
                            {
                                mobileImageDetails.Status  = "ERROR";
                                mobileImageDetails.Message = "Oops! Unkown error. Sorry...";
                            }
                        }
                        else
                        {
                            mobileImageDetails.Status  = "NOTOK";
                            mobileImageDetails.Message = "Check settings with Company Administrator.";
                        }
                    }
                    else
                    {
                        mobileImageDetails.Status  = "NOTOK";
                        mobileImageDetails.Message = "Please update App.";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                mobileImageDetails.Status  = "ERROR";
                mobileImageDetails.Message = "Oops! Unkown error. Sorry...";
            }
            return(mobileImageDetails);
        }
Пример #4
0
 /// <summary>
 /// Checks the task schedule to see whether the task should be run
 /// and performs the business logic actions if needed.
 /// </summary>
 public void Run()
 {
     if (ShouldRunTask())
     {
         try
         {
             UpdateAgentStartDate();
             PerformActions();
         }
         catch (Exception ex)
         {
             AgentErrorLog.HandleException(ex);
         }
     }
 }
Пример #5
0
 /// <summary>
 /// Update agent execution flag.
 /// </summary>
 /// <param name="isExecuted">The is executed.</param>
 private static void UpDateAgentExecutionFlag(string isExecuted)
 {
     try
     {
         using (StageBitzDB dataContext = new StageBitzDB())
         {
             SystemValue sysValue = dataContext.SystemValues.Where(sv => sv.Name == "IsAgentRunning").FirstOrDefault();
             sysValue.Value = isExecuted;
             dataContext.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         AgentErrorLog.HandleException(ex);
     }
 }
Пример #6
0
        /// <summary>
        /// Process starts here.
        /// </summary>
        /// <param name="args">The arguments.</param>
        private static void Main(string[] args)
        {
            try
            {
                //set the culture
                CultureInfo cultureInfo = new CultureInfo("en-AU");
                Thread.CurrentThread.CurrentCulture   = cultureInfo;
                Thread.CurrentThread.CurrentUICulture = cultureInfo;

                bool   ownsMutex = true;
                string MutexName = "StageBitzAgent";

                #region Check mutex and run the agent activities

                using (Mutex mutex = new Mutex(true, MutexName, out ownsMutex))
                {
                    if (!ownsMutex)
                    {
                        AgentErrorLog.WriteToErrorLog("StageBitz Agent could not run as previous instance is already running.");
                    }
                    else
                    {
                        try
                        {
                            RunAgent();
                        }
                        catch (Exception ex)
                        {
                            AgentErrorLog.HandleException(ex);
                        }
                        finally
                        {
                            mutex.ReleaseMutex();
                        }
                    }
                }

                #endregion Check mutex and run the agent activities
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
            }
        }
Пример #7
0
        /// <summary>
        /// Creates the project export file.
        /// </summary>
        /// <param name="projectId">The project identifier.</param>
        /// <param name="userId">The user identifier.</param>
        /// <param name="fileSize">Size of the file.</param>
        /// <returns>Is success.</returns>
        private bool CreateProjectExportFile(int projectId, int userId, out long fileSize)
        {
            ProjectBL projectBL  = new ProjectBL(DataContext);
            CompanyBL companyBL  = new CompanyBL(DataContext);
            string    baseFolder = companyBL.GetExportFileLocation(Common.Constants.GlobalConstants.RelatedTables.ExportFiles.Project, projectId);

            if (baseFolder.Trim().Length > 0)
            {
                FileHandler.CreateFolder(baseFolder);
                Project project = projectBL.GetProject(projectId);
                try
                {
                    // Intialize Cancellation Token.
                    CancellationTokenSource cts = new CancellationTokenSource();
                    ParallelOptions         po  = new ParallelOptions();
                    po.CancellationToken = cts.Token;

                    // Create new task (thread) for create project attachments.
                    var projectAttachmentTask = Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            var documentMediaIds = projectBL.GetProjectDocumentMediaIds(projectId);

                            // Check for the cancel request. (after starting the task).
                            cts.Token.ThrowIfCancellationRequested();

                            var projectAttachmentPath = Path.Combine(baseFolder, "Project Details Attachments");
                            FileHandler.CreateFolder(projectAttachmentPath);

                            // Generate attachments.
                            // single threaded.
                            // Due to the fact that this is an heavy IO bound operation which is recomended to do async.
                            List <Task> asyncTaskList = new List <Task>();
                            foreach (int documentMediaId in documentMediaIds)
                            {
                                // Check for task cancelation request.
                                cts.Token.ThrowIfCancellationRequested();
                                asyncTaskList.Add(SaveDocumentMedia(string.Empty, documentMediaId, projectAttachmentPath));
                            }

                            // Wait for all async taks.
                            Task.WaitAll(asyncTaskList.ToArray());
                        }
                        catch (Exception ex)
                        {
                            // Request cancel for all other pending tasks. And throw the exception.
                            cts.Cancel();
                            throw ex;
                        }
                    }, cts.Token);

                    // Create new task (thread) for create Budget Summary Report.
                    var budgetSummaryReportTask = Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            GenerateProjectBudgetSummaryReport(project, userId, baseFolder);
                        }
                        catch (Exception ex)
                        {
                            // Request cancel for all other pending tasks. And throw the exception.
                            cts.Cancel();
                            throw ex;
                        }
                    }, cts.Token);

                    // Create new task (thread) for create item brief attachments.
                    var ItemBriefDocumentMediaTask = Task.Factory.StartNew(() =>
                    {
                        var groupedDocumentMedias = projectBL.GetItemTypeDocumentMediaByProject(projectId);

                        // Check for the cancel request. (after starting the task).
                        cts.Token.ThrowIfCancellationRequested();

                        // Loop all item types for the company.
                        Parallel.ForEach <ItemTypeDocumentMedia>(groupedDocumentMedias, po, dm =>
                        {
                            try
                            {
                                string itemTypePath   = Path.Combine(baseFolder, dm.ItemTypeName);
                                string attachmentPath = Path.Combine(itemTypePath, "Attachments");
                                FileHandler.CreateFolder(attachmentPath);

                                // Handle report generation to separate task.
                                Task itemBriefReportTask = Task.Factory.StartNew(() =>
                                {
                                    try
                                    {
                                        GenerateItemBriefExportFile(projectId, baseFolder, dm);
                                        GenerateItemisedPurchaseReport(project, dm.ItemTypeName, dm.ItemTypeId, userId, itemTypePath);
                                        GenerateActiveTaskReport(project, dm.ItemTypeName, dm.ItemTypeId, userId, itemTypePath);
                                    }
                                    catch (Exception ex)
                                    {
                                        // Request cancel for all other pending tasks. And throw the exception.
                                        cts.Cancel();
                                        throw ex;
                                    }
                                }, cts.Token);

                                // Generate attachments.
                                // single threaded.
                                // Due to the fact that this is an heavy IO bound operation which is recomended to do async.
                                List <Task> asyncTaskList = new List <Task>();
                                foreach (DocumentMediaInfo documentMediaInfo in dm.DocumentMedias)
                                {
                                    // Check for task cancelation request.
                                    cts.Token.ThrowIfCancellationRequested();
                                    string filePrefix = string.Format("{0} {1} - ", documentMediaInfo.EntityId, Utils.Ellipsize(documentMediaInfo.EntityName, 50));
                                    asyncTaskList.Add(SaveDocumentMedia(filePrefix, documentMediaInfo.DocumentMediaId, attachmentPath));
                                }

                                // Wait for all async taks.
                                Task.WaitAll(asyncTaskList.ToArray());

                                // Wait for report task.
                                itemBriefReportTask.Wait();
                            }
                            catch (Exception ex)
                            {
                                // Request cancel for all other pending tasks. And throw the exception.
                                cts.Cancel();
                                throw ex;
                            }
                        });
                    }, cts.Token);

                    Task[] tasks = new[] { projectAttachmentTask, budgetSummaryReportTask, ItemBriefDocumentMediaTask };
                    try
                    {
                        Task.WaitAll(tasks, cts.Token);
                        string zipPath = string.Concat(baseFolder, ".zip");
                        FileHandler.CreateZipFile(baseFolder, zipPath);
                        fileSize = FileHandler.GetFileSize(zipPath);
                        return(true);
                    }
                    catch (OperationCanceledException)
                    {
                        // One or more operations has been canceled. Wait for other running tasks to complete. (Any status => success or failed).
                        Task.Factory.ContinueWhenAll(tasks, _ =>
                        {
                            // Get exceptions from failed tasks.
                            Exception[] exceptions = tasks.Where(t => t.IsFaulted).Select(t => t.Exception).ToArray();
                            foreach (Exception e in exceptions)
                            {
                                // log failures.
                                AgentErrorLog.HandleException(e);
                            }
                        }).Wait();
                    }
                }
                catch (AggregateException ae)
                {
                    foreach (Exception e in ae.Flatten().InnerExceptions)
                    {
                        // log failures.
                        AgentErrorLog.HandleException(e);
                    }
                }
                finally
                {
                    FileHandler.DeleteFolder(baseFolder);
                }
            }

            fileSize = 0;
            return(false);
        }
Пример #8
0
        /// <summary>
        /// Creates the company export file.
        /// </summary>
        /// <param name="companyId">The company identifier.</param>
        /// <param name="userId">The user identifier.</param>
        /// <param name="fileSize">Size of the file.</param>
        /// <returns>Is success.</returns>
        private bool CreateCompanyExportFile(int companyId, int userId, out long fileSize)
        {
            CompanyBL companyBL  = new CompanyBL(DataContext);
            string    baseFolder = companyBL.GetExportFileLocation(Common.Constants.GlobalConstants.RelatedTables.ExportFiles.Company, companyId);

            if (baseFolder.Trim().Length > 0)
            {
                try
                {
                    // Intialize Cancellation Token.
                    CancellationTokenSource cts = new CancellationTokenSource();
                    ParallelOptions         po  = new ParallelOptions();
                    po.CancellationToken = cts.Token;

                    string bookingPath = Path.Combine(baseFolder, "Bookings");
                    FileHandler.CreateFolder(bookingPath);

                    // Generate booking reports.(new Task/Thread.)
                    Task bookingReportTask = Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            GenerateCompanyInventoryBookingReports(companyId, userId, bookingPath);
                        }
                        catch (Exception ex)
                        {
                            // Request cancel for all other pending tasks. And throw the exception.
                            cts.Cancel();
                            throw ex;
                        }
                    }, cts.Token);

                    // Generate item type reports and item brief attachements.(new Task/Thread.)
                    Task itemTypeTask = Task.Factory.StartNew(() =>
                    {
                        var groupedDocumentMedias = companyBL.GetItemTypeDocumentMediaByCompany(companyId);

                        // Check for the cancel request. (after starting the task).
                        cts.Token.ThrowIfCancellationRequested();

                        Parallel.ForEach <ItemTypeDocumentMedia>(groupedDocumentMedias, po, dm =>
                        {
                            try
                            {
                                // Create Item List with all Specs report
                                Task itemReportTask = Task.Factory.StartNew(() =>
                                {
                                    try
                                    {
                                        string fileName          = string.Concat(dm.ItemTypeName, " - Item List with all Specs");
                                        string fileNameExtension = GlobalConstants.FileExtensions.ExcelFile;
                                        string encoding;
                                        string mimeType;
                                        string attachmentPathCI = Path.Combine(baseFolder, dm.ItemTypeName);
                                        byte[] reportBytes      = UserWebReportHandler.GenerateInventoryExport(companyId, dm.ItemTypeId, ReportTypes.Excel, out fileNameExtension, out encoding, out mimeType);
                                        FileHandler.SaveFileToDisk(reportBytes, string.Format("{0}.{1}", fileName, fileNameExtension), attachmentPathCI).Wait();
                                    }
                                    catch (Exception ex)
                                    {
                                        // Request cancel for all other pending tasks. And throw the exception.
                                        cts.Cancel();
                                        //throw ex;
                                    }
                                }, cts.Token);

                                string attachmentPath = Path.Combine(baseFolder, dm.ItemTypeName, "Attachments");
                                FileHandler.CreateFolder(attachmentPath);

                                // Generate attachments.
                                // single threaded.
                                // Due to the fact that this is an heavy IO bound operation which is recomended to do async.
                                List <Task> asyncTaskList = new List <Task>();
                                foreach (DocumentMediaInfo documentMediaInfo in dm.DocumentMedias)
                                {
                                    // Check for the cancel request. (after starting the task).
                                    cts.Token.ThrowIfCancellationRequested();

                                    string filePrefix = string.Format("{0} {1} - ", documentMediaInfo.EntityId, Utils.Ellipsize(documentMediaInfo.EntityName, 50));
                                    asyncTaskList.Add(SaveDocumentMedia(filePrefix, documentMediaInfo.DocumentMediaId, attachmentPath));
                                }

                                // Wait for all async taks.
                                Task.WaitAll(asyncTaskList.ToArray());

                                // Wait for report task.
                                itemReportTask.Wait();
                            }
                            catch (Exception ex)
                            {
                                // Request cancel for all other pending tasks. And throw the exception.
                                cts.Cancel();
                                throw ex;
                            }
                        });
                    }, cts.Token);

                    Task[] tasks = new[] { bookingReportTask, itemTypeTask };
                    try
                    {
                        Task.WaitAll(tasks, cts.Token);
                        string zipPath = string.Concat(baseFolder, ".zip");
                        FileHandler.CreateZipFile(baseFolder, zipPath);
                        fileSize = FileHandler.GetFileSize(zipPath);
                        return(true);
                    }
                    catch (OperationCanceledException)
                    {
                        // One or more operations has been canceled. Wait for other running tasks to complete. (Any status => success or failed).
                        Task.Factory.ContinueWhenAll(tasks, _ =>
                        {
                            // Get exceptions from failed tasks.
                            Exception[] exceptions = tasks.Where(t => t.IsFaulted).Select(t => t.Exception).ToArray();
                            foreach (Exception e in exceptions)
                            {
                                // log failures.
                                AgentErrorLog.HandleException(e);
                            }
                        }).Wait();
                    }
                }
                catch (AggregateException ae)
                {
                    foreach (Exception e in ae.Flatten().InnerExceptions)
                    {
                        // log failures.
                        AgentErrorLog.HandleException(e);
                    }
                }
                finally
                {
                    FileHandler.DeleteFolder(baseFolder);
                }
            }

            fileSize = 0;
            return(false);
        }
Пример #9
0
        public MobileInitialData AuthenticateUser(InitialRequestDetails userAuthenticationDetailsObj)
        {
            string status  = string.Empty;
            string message = string.Empty;

            MobileInitialData mobileInitialData = null;

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    bool isValidVersion = Helper.IsValidAppVersion(userAuthenticationDetailsObj.Version, out status);
                    if (isValidVersion)
                    {
                        string              passwordHash = Utils.HashPassword(userAuthenticationDetailsObj.Pwd);
                        PersonalBL          personalBL   = new PersonalBL(dataContext);
                        StageBitz.Data.User user         = personalBL.AuthenticateUser(userAuthenticationDetailsObj.Email, passwordHash);

                        if (user == null)
                        {
                            int pendingEmailTypeCodeId            = Utils.GetCodeByValue("EmailChangeRequestStatus", "PENDING").CodeId;
                            EmailChangeRequest emailChangeRequest = dataContext.EmailChangeRequests.Where(ec => ec.Email == userAuthenticationDetailsObj.Email && ec.StatusCode == pendingEmailTypeCodeId).FirstOrDefault();
                            if (emailChangeRequest != null)
                            {
                                //Check the password by getting the current active userID.
                                int userId = emailChangeRequest.UserId;
                                //If the PassWord is matched, we know that the user is valid where as he did not follow the link.
                                if (dataContext.Users.Where(u => u.UserId == userId && u.Password == passwordHash).FirstOrDefault() != null)
                                {
                                    // He has changed his Primary Email Address. However he has not activate it yet
                                    status  = "NOTOK";
                                    message = "Email updated please confirm.";
                                    goto FinalStatement;
                                }
                            }

                            //Invalid LogIn
                            status  = "NOTOK";
                            message = "Invalid Email address or Password.";
                        }
                        else
                        {
                            if (user.IsActive == true)
                            {
                                //Build the token
                                //Return Initializtion data
                                status = "OK";
                                byte[] content = Utils.EncryptStringAES(user.UserId.ToString());
                                mobileInitialData           = Helper.GetAllInitializeDataForUser(user.UserId);
                                mobileInitialData.UserToken = Utils.EncryptStringAES(user.UserId.ToString());
                            }
                            else
                            {
                                //User is not activated yet
                                status  = "NOTOK";
                                message = "Please activate your account.";
                            }
                        }
                    }
                    else
                    {
                        message = "Please update App.";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                status  = "ERROR";
                message = "Oops! Unkown error. Sorry...";
            }
FinalStatement:
            if (mobileInitialData == null)
            {
                mobileInitialData = new MobileInitialData();
            }
            mobileInitialData.Status  = status;
            mobileInitialData.Message = message;
            return(mobileInitialData);
        }
Пример #10
0
        public ItemResult SyncItem(MobileItem mobileItem)
        {
            string     status         = string.Empty;
            string     message        = string.Empty;
            ItemResult itemResult     = new ItemResult();
            bool       isValidVersion = true;

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    isValidVersion = Helper.IsValidAppVersion(mobileItem.Version, out status);
                    if (isValidVersion)
                    {
                        if (mobileItem != null)
                        {
                            //Check if this Item has already been created in MobileItem table
                            //If not create
                            InventoryMobileItem inventoryMobileItem = dataContext.InventoryMobileItems.Where(imi => imi.MobileItemId == mobileItem.DeviceItemId).FirstOrDefault();
                            if (inventoryMobileItem == null)
                            {
                                int userId = int.Parse(Utils.DecryptStringAES(mobileItem.Token));

                                //Check if the user can Create the Item
                                CompanyBL   companyBL   = new CompanyBL(dataContext);
                                FinanceBL   financeBL   = new FinanceBL(dataContext);
                                InventoryBL inventoryBL = new InventoryBL(dataContext);

                                if (companyBL.HasEditPermissionForInventoryStaff(mobileItem.CompanyId, userId, null))
                                {
                                    //New Creation of Item
                                    if (mobileItem.ItemId == 0)
                                    {
                                        //To create items in the hidden mode, if the limits have reached.
                                        bool isFreeTrailCompany = companyBL.IsFreeTrialCompany(mobileItem.CompanyId);

                                        CompanyPaymentPackage companyPaymentPackage = financeBL.GetCurrentPaymentPackageFortheCompanyIncludingFreeTrial(mobileItem.CompanyId);

                                        InventoryPaymentPackageDetails inventoryPaymentPackageDetails = null;
                                        if (companyPaymentPackage != null)
                                        {
                                            inventoryPaymentPackageDetails =
                                                Utils.GetSystemInventoryPackageDetailByPaymentPackageTypeId(companyPaymentPackage.InventoryPaymentPackageTypeId);
                                        }

                                        CompanyCurrentUsage companyCurrentUsage = financeBL.GetCompanyCurrentUsage(mobileItem.CompanyId, null);

                                        if (!financeBL.HasExceededInventoryLimit(isFreeTrailCompany, inventoryPaymentPackageDetails, companyCurrentUsage))
                                        {
                                            inventoryMobileItem = new InventoryMobileItem();
                                            inventoryMobileItem.MobileItemId = mobileItem.DeviceItemId;
                                            inventoryMobileItem.CreatedBy    = userId;
                                            inventoryMobileItem.CreatedDate  = Utils.Now;
                                            dataContext.InventoryMobileItems.AddObject(inventoryMobileItem);

                                            Item item = new Item();
                                            item.Name                  = mobileItem.Name;
                                            item.IsManuallyAdded       = true;
                                            item.ItemTypeId            = mobileItem.ItemTypeId;
                                            item.Quantity              = mobileItem.Quantity;
                                            item.Description           = mobileItem.Description;
                                            item.CompanyId             = mobileItem.CompanyId;
                                            item.IsActive              = true;
                                            item.CreatedByUserId       = item.LastUpdatedByUserId = userId;
                                            item.CreatedDate           = item.LastUpdatedDate = Utils.Now;
                                            item.VisibilityLevelCodeId = Utils.GetCodeIdByCodeValue("InventoryVisibilityLevel", "ABOVE_SHAREDINVENTORY");

                                            dataContext.Items.AddObject(item);
                                            dataContext.SaveChanges();
                                            itemResult.Id = item.ItemId;
                                            status        = "OK";
                                        }
                                        else
                                        {
                                            status  = "LIMITREACHED";
                                            message = "Inventory plan limit reached.";
                                        }
                                    }
                                    else
                                    {
                                        //Edit existing one
                                        Item exItem = inventoryBL.GetItem(mobileItem.ItemId);
                                        if (exItem != null && exItem.IsActive)
                                        {
                                            Code userVisibilityCode = inventoryBL.GetUserInventoryVisibilityLevel(mobileItem.CompanyId, userId, null, false);
                                            if (!inventoryBL.GetItemStatusInformationForUser(exItem, mobileItem.CompanyId, userId).IsReadOnly&& exItem.Code.SortOrder >= userVisibilityCode.SortOrder)
                                            {
                                                if (mobileItem.LastUpdateDate == exItem.LastUpdatedDate)
                                                {
                                                    exItem.Name                = mobileItem.Name;
                                                    exItem.ItemTypeId          = mobileItem.ItemTypeId;
                                                    exItem.Description         = mobileItem.Description;
                                                    exItem.Quantity            = mobileItem.Quantity;
                                                    exItem.LastUpdatedByUserId = userId;
                                                    exItem.LastUpdatedDate     = Utils.Now;
                                                    dataContext.SaveChanges();
                                                    status        = "OK";
                                                    itemResult.Id = mobileItem.ItemId;
                                                }
                                                else
                                                {
                                                    status  = "ITEMEDITED";
                                                    message = "Item already edited.";
                                                }
                                            }
                                            else
                                            {
                                                status  = "NORIGHTS";
                                                message = "Check settings with Company Administrator.";
                                            }
                                        }
                                        else
                                        {
                                            status  = "ITEMDELETED";
                                            message = "Item no longer exists.";
                                        }
                                    }
                                }
                                else
                                {
                                    status  = "NOACCESS";
                                    message = "Check settings with Company Administrator.";
                                }
                            }
                            else
                            {
                                itemResult.Id = inventoryMobileItem.ItemId;
                                status        = "ITEMEXIST";
                                message       = "Item already synced.";
                            }
                        }
                    }
                    else
                    {
                        status  = "INVALIDAPP";
                        message = "Please update App.";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                status  = "ERROR";
                message = "Oops! Unkown error. Sorry...";
            }
            itemResult.MobileId = mobileItem.DeviceItemId;
            itemResult.Status   = status;
            itemResult.Message  = message;
            return(itemResult);
        }
Пример #11
0
        public MobileItemDetails GetItemDetails(MobileItemRequestDetails mobileItemRequestDetails)
        {
            string            message           = string.Empty;
            string            status            = string.Empty;
            bool              isValidVersion    = true;
            MobileItemDetails mobileItemDetails = new MobileItemDetails();

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    isValidVersion = Helper.IsValidAppVersion(mobileItemRequestDetails.Version, out status);
                    if (isValidVersion)
                    {
                        //Check the user security
                        int userId = int.Parse(Utils.DecryptStringAES(mobileItemRequestDetails.Token));

                        if (Utils.CanAccessInventory(mobileItemRequestDetails.CompanyId, userId))
                        {
                            Item item = dataContext.Items.Where(i => i.ItemId == mobileItemRequestDetails.ItemId).FirstOrDefault();
                            if (item != null)
                            {
                                InventoryBL inventoryBL = new InventoryBL(dataContext);
                                mobileItemDetails.ItemId      = item.ItemId;
                                mobileItemDetails.Status      = "OK";
                                mobileItemDetails.Name        = item.Name;
                                mobileItemDetails.ItemTypeId  = item.ItemTypeId.HasValue ? item.ItemTypeId.Value : 0;
                                mobileItemDetails.Description = item.Description;
                                mobileItemDetails.Quantity    = item.Quantity.HasValue ? item.Quantity.Value : 0;
                                mobileItemDetails.CanEditItem = inventoryBL.GetItemStatusInformationForUser(item, mobileItemRequestDetails.CompanyId, userId).IsReadOnly ? 0 : 1;
                                //Get Item Status
                                mobileItemDetails.ItemStatus = inventoryBL.GetItemStatus(item.ItemId);

                                mobileItemDetails.LastUpdatedDate = item.LastUpdatedDate.HasValue ? item.LastUpdatedDate.Value : item.CreatedDate.Value;
                                UtilityBL utilityBL = new UtilityBL(dataContext);

                                var medias = utilityBL.GetDocumentMedias("Item", item.ItemId, true, null);
                                if (medias.Count > 0)
                                {
                                    var docMediaIdList = medias.OrderByDescending(m => m.SortOrder).ThenBy(m => m.DocumentMediaId).Select(m => m.DocumentMediaId).ToList <int>();
                                    mobileItemDetails.DocumentMediaIdList = docMediaIdList;
                                }
                            }
                            else
                            {
                                mobileItemDetails.Status  = "NOTOK";
                                mobileItemDetails.Message = "Item not exist.";
                            }
                        }
                        else
                        {
                            mobileItemDetails.Status  = "NOTOK";
                            mobileItemDetails.Message = "Check settings with Company Administrator.";
                        }
                    }
                    else
                    {
                        mobileItemDetails.Status  = "NOTOK";
                        mobileItemDetails.Message = "Please update App.";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                mobileItemDetails.Status  = "ERROR";
                mobileItemDetails.Message = "Oops! Unkown error. Sorry...";
            }
            return(mobileItemDetails);
        }
Пример #12
0
        public MobileSearchResult GetItemSearchResults(MobileItemSearchRequest mobileItemSearchRequest)
        {
            string             message            = string.Empty;
            string             status             = string.Empty;
            bool               isValidVersion     = true;
            MobileSearchResult mobileSearchResult = new MobileSearchResult();

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    isValidVersion = Helper.IsValidAppVersion(mobileItemSearchRequest.Version, out status);
                    if (isValidVersion)
                    {
                        //Check the user security
                        int userId = int.Parse(Utils.DecryptStringAES(mobileItemSearchRequest.Token));

                        if (Utils.CanAccessInventory(mobileItemSearchRequest.CompanyId, userId))
                        {
                            int mobileInventorySearchResultCount = Convert.ToInt32(Utils.GetSystemValue("MobileInventorySearchResultCount"));

                            int         itemCount         = 0;
                            InventoryBL inventoryBL       = new InventoryBL(dataContext);
                            var         mobileSearchItems = inventoryBL.GetInventoryItems(userId, mobileItemSearchRequest.CompanyId,
                                                                                          mobileItemSearchRequest.CompanyId, mobileItemSearchRequest.ItemName, mobileItemSearchRequest.ItemTypeId,
                                                                                          null, null, null, null,
                                                                                          mobileInventorySearchResultCount, mobileItemSearchRequest.ViewedResultCount, string.Empty, out itemCount).ToList <InventoryItemData>();

                            int  resultCountRemaining = itemCount - mobileItemSearchRequest.ViewedResultCount;
                            bool hasMoreResults       = (resultCountRemaining > mobileInventorySearchResultCount);
                            mobileSearchResult.HasMoreResults = hasMoreResults ? 1 : 0;

                            var sortedList = (from sr in mobileSearchItems
                                              select new MobileSearchItem
                            {
                                Name = sr.Item.Name,
                                ItemId = sr.Item.ItemId,
                                Description = sr.Item.Description,
                                Quantity = sr.Item.Quantity.HasValue ? sr.Item.Quantity.Value : 0
                            }).ToList();

                            mobileSearchResult.MobileSearchItems = sortedList;
                            mobileSearchResult.Status            = "OK";
                        }
                        else
                        {
                            mobileSearchResult.Status  = "NOTOK";
                            mobileSearchResult.Message = "Check settings with Company Administrator.";
                        }
                    }
                    else
                    {
                        mobileSearchResult.Status  = "NOTOK";
                        mobileSearchResult.Message = "Please update App.";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                mobileSearchResult.Status  = "ERROR";
                mobileSearchResult.Message = "Oops! Unkown error. Sorry...";
            }
            return(mobileSearchResult);
        }
Пример #13
0
        public ItemResult SyncImage(MobileDocumentMedia mobileDocumentMedia)
        {
            ItemResult itemResult      = new ItemResult();
            string     message         = string.Empty;
            string     status          = string.Empty;
            bool       isValidVersion  = true;
            int        documentMediaId = 0;

            try
            {
                using (StageBitzDB dataContext = new StageBitzDB())
                {
                    if (mobileDocumentMedia != null)
                    {
                        isValidVersion = Helper.IsValidAppVersion(mobileDocumentMedia.Version, out status);
                        if (isValidVersion)
                        {
                            if (mobileDocumentMedia != null)
                            {
                                //Check if the Item is already being synced
                                if (dataContext.InventoryMobileDocumentMedias.Where(imdm => imdm.MobileDocumentMediaId == mobileDocumentMedia.MobileImageId && imdm.RelatedTable == mobileDocumentMedia.RelatedTable && imdm.RelatedId == mobileDocumentMedia.RelatedId).FirstOrDefault() == null)
                                {
                                    //Check if the Item is exist
                                    Data.Item item = dataContext.Items.Where(i => i.ItemId == mobileDocumentMedia.RelatedId).FirstOrDefault();

                                    if (item != null && item.IsActive)
                                    {
                                        int         userId      = int.Parse(Utils.DecryptStringAES(mobileDocumentMedia.Token));
                                        InventoryBL inventoryBL = new InventoryBL(dataContext);
                                        if (!inventoryBL.GetItemStatusInformationForUser(item, mobileDocumentMedia.CompanyId, userId).IsReadOnly)
                                        {
                                            //Images can be either deleted or added.
                                            if (mobileDocumentMedia.DocumentMediaId == 0)
                                            {
                                                DocumentMedia documentMedia = new DocumentMedia();
                                                documentMedia.DocumentMediaContent = Helper.LoadImage(mobileDocumentMedia.Image, false, mobileDocumentMedia.FileExtension);
                                                documentMedia.Thumbnail            = Helper.LoadImage(mobileDocumentMedia.Image, true, mobileDocumentMedia.FileExtension);
                                                documentMedia.RelatedId            = mobileDocumentMedia.RelatedId;
                                                documentMedia.RelatedTableName     = mobileDocumentMedia.RelatedTable;
                                                documentMedia.SortOrder            = inventoryBL.HasDefaultImageSet(mobileDocumentMedia.RelatedId, mobileDocumentMedia.RelatedTable) ? 0 : 1;
                                                documentMedia.IsImageFile          = true;
                                                documentMedia.FileExtension        = mobileDocumentMedia.FileExtension;
                                                documentMedia.Name        = mobileDocumentMedia.Name;
                                                documentMedia.CreatedBy   = documentMedia.LastUpdatedBy = userId;
                                                documentMedia.CreatedDate = documentMedia.LastUpdatedDate = Utils.Today;
                                                dataContext.DocumentMedias.AddObject(documentMedia);

                                                InventoryMobileDocumentMedia inventoryMobileDocumentMedia = new InventoryMobileDocumentMedia();
                                                inventoryMobileDocumentMedia.MobileDocumentMediaId = mobileDocumentMedia.MobileImageId;
                                                inventoryMobileDocumentMedia.DocumentMediaId       = documentMedia.DocumentMediaId;
                                                inventoryMobileDocumentMedia.RelatedTable          = mobileDocumentMedia.RelatedTable;
                                                inventoryMobileDocumentMedia.RelatedId             = mobileDocumentMedia.RelatedId;
                                                inventoryMobileDocumentMedia.CreatedBy             = userId;
                                                inventoryMobileDocumentMedia.CreatedDate           = inventoryMobileDocumentMedia.LastUpdateDate = Utils.Today;
                                                dataContext.InventoryMobileDocumentMedias.AddObject(inventoryMobileDocumentMedia);

                                                dataContext.SaveChanges();
                                                status          = "OK";
                                                documentMediaId = documentMedia.DocumentMediaId;
                                            }
                                            else
                                            {
                                                UtilityBL     utilityBL     = new UtilityBL(dataContext);
                                                DocumentMedia documentMedia = utilityBL.GetDocumentMedia(mobileDocumentMedia.DocumentMediaId);
                                                if (documentMedia != null)
                                                {
                                                    dataContext.DeleteDocumentMedia(mobileDocumentMedia.DocumentMediaId);
                                                    status = "OK";
                                                }
                                                else
                                                {
                                                    status  = "OK";
                                                    message = "Image no longer exists.";
                                                }
                                            }
                                        }
                                        else
                                        {
                                            status  = "NORIGHTS";
                                            message = "Check settings with Company Administrator.";
                                        }
                                    }
                                    else
                                    {
                                        status  = "ITEMDELETED";
                                        message = "Item no longer exists.";
                                    }
                                }
                                else
                                {
                                    status  = "EXIST";
                                    message = "Image already synced.";
                                }
                            }
                        }
                        else
                        {
                            status  = "INVALIDAPP";
                            message = "Please update App.";
                        }
                    }
                    else
                    {
                        status  = "ERROR";
                        message = "Oops! Unkown error. Sorry...";
                    }
                }
            }
            catch (Exception ex)
            {
                AgentErrorLog.HandleException(ex);
                status  = "ERROR";
                message = "Oops! Unkown error. Sorry...";
            }
            itemResult.Id       = documentMediaId;
            itemResult.MobileId = mobileDocumentMedia != null ? mobileDocumentMedia.MobileImageId : "0";
            itemResult.Status   = status;
            itemResult.Message  = message;
            return(itemResult);
        }
Пример #14
0
        /// <summary>
        /// Processes the invoice.
        /// </summary>
        /// <param name="invoice">The invoice.</param>
        /// <param name="company">The company.</param>
        /// <param name="dataContext">The data context.</param>
        /// <returns></returns>
        private static bool ProcessInvoice(Invoice invoice, Data.Company company, StageBitzDB dataContext)
        {
            bool isSuccess = true;

            try
            {
                //Get the Payment History record which has not sent to the payment gateway.
                PaymentLog paymentLog = dataContext.PaymentLogs.Where(pl => pl.RelatedTableName == "Invoice" && pl.RelatedId == invoice.InvoiceID && pl.IsSentToPaymentGateway == false).FirstOrDefault();

                //Get the TokenID of the Company to pass over to Payment gateway.
                CreditCardToken creditCardToken = (from ct in dataContext.CreditCardTokens
                                                   where ct.RelatedTableName == "Company" && ct.RelatedId == company.CompanyId &&
                                                   ct.IsActive == true
                                                   select ct).FirstOrDefault();

                bool isPaymentSuccess = false;

                if (creditCardToken != null)
                {
                    paymentLog.ReferenceNumber = Utils.GetSystemValue("ReferenceNumberPrefix") + paymentLog.PaymentLogId;

                    //Make the payment via the payment gateway.
                    //Multuply by 100 to send over to FatZebra.
                    //Utils.DecryptStringAES(creditCardToken.Token)
                    var response = Purchase.Create((int)(invoice.Amount * 100), Utils.DecryptStringAES(creditCardToken.Token), null, paymentLog.ReferenceNumber, Utils.GetSystemValue("SBServerIPAddress"));
                    isPaymentSuccess = response.Successful && response.Result != null && response.Result.Successful;

                    if (isPaymentSuccess)
                    {
                        //Update Invoice as Processed.
                        invoice.InvoiceStatusCodeId = Utils.GetCodeByValue("InvoiceStatus", "PROCESSED").CodeId;

                        //Create Receipt for the Invoice
                        FinanceSupport.CreateReceipt(company.CompanyId, "Company", string.Format("Payment for Company {0}", company.CompanyName), invoice.Amount, invoice.Transaction.TransactionID, dataContext);
                    }
                    else
                    {
                        //Update Invoice as Failed.
                        invoice.InvoiceStatusCodeId = Utils.GetCodeByValue("InvoiceStatus", "FAILED").CodeId;
                    }

                    //Update the Payment History record as Sent to payment gateway.
                    paymentLog.IsSentToPaymentGateway = true;
                    paymentLog.IsPaymentSuccess       = isPaymentSuccess;
                    if (response.Result != null)
                    {
                        paymentLog.ResponseId = response.Result.ID;
                    }
                    paymentLog.Description       = GetPaymentGatewayLogDescription(response);
                    paymentLog.CreditCardTokenId = creditCardToken.CreditCardTokenID;
                }
                else
                {
                    paymentLog.Description = "Credit card details not provided.";
                    //Update Invoice as Failed.
                    invoice.InvoiceStatusCodeId = Utils.GetCodeByValue("InvoiceStatus", "FAILED").CodeId;
                }

                invoice.LastUpdateDate = Utils.Now;
                invoice.LastUpdatedBy  = 0;

                paymentLog.LastUpdatedDate     = Utils.Now;
                paymentLog.LastUpdatedByUserId = 0;

                isSuccess = isPaymentSuccess;
            }
            catch (Exception ex)
            {
                AgentErrorLog.WriteToErrorLog("Failed to Process the Invoice for CompanyId " + invoice.RelatedID);
                AgentErrorLog.HandleException(ex);
                isSuccess = false;
            }
            return(isSuccess);
        }
Пример #15
0
        /// <summary>
        /// This is to be called by monthly agent and manual payment.
        /// </summary>
        public static bool ProcessInvoicesAndPayments(int companyId, DateTime dateToConsider, bool shouldCreateInvoices, int userId)
        {
            using (StageBitzDB dataContext = new StageBitzDB())
            {
                FinanceSupport.InitializePaymentSettings();
                bool           isPaymentSuccess = false;
                bool           isManualPayment  = (companyId == 0) ? false : true;
                List <Invoice> invoiceList      = new List <Invoice>();

                if (shouldCreateInvoices)
                {
                    List <CompanyPaymentSummary> unProcessedPaymentSummaries = GetUnProcessedCompanyPaymentSummaries(0, dataContext, dateToConsider);

                    //Only consider companies which has payment packages
                    List <Data.Company> companies = (from c in dataContext.Companies
                                                     join cpp in dataContext.CompanyPaymentPackages on c.CompanyId equals cpp.CompanyId
                                                     select c).Distinct().ToList();

                    if (unProcessedPaymentSummaries.Count > 0)
                    {
                        CompanyBL companyBL = new CompanyBL(dataContext);

                        foreach (Data.Company company in companies)
                        {
                            try
                            {
                                List <CompanyPaymentSummary> unProcessedCompanyPaymentSummaries = unProcessedCompanyPaymentSummaries = unProcessedPaymentSummaries.Where(upcs => upcs.CompanyId == company.CompanyId).OrderBy(ups => ups.CompanyPaymentSummaryId).ToList();

                                //*******Consider payment summaries for the company*********
                                if (unProcessedCompanyPaymentSummaries != null && unProcessedCompanyPaymentSummaries.Count() > 0)
                                {
                                    if (!companyBL.IsFreeTrialCompany(company.CompanyId, dateToConsider))
                                    {
                                        decimal  totalAmount = unProcessedCompanyPaymentSummaries.Sum(ups => ups.Amount);
                                        DateTime fromDate    = unProcessedCompanyPaymentSummaries.First().FromDate;
                                        DateTime toDate      = unProcessedCompanyPaymentSummaries.Last().ToDate;

                                        Invoice invoice = null;
                                        if (totalAmount > 0) //generate the invoice only if there is a due amount to pay
                                        {
                                            invoice = FinanceSupport.CreateInvoice(company.CompanyId, "Company", "PACKAGEFEE", string.Format("Payment for Company {0}", company.CompanyName), decimal.Round(totalAmount, 2), fromDate, toDate, dataContext);
                                        }

                                        foreach (CompanyPaymentSummary companyPackagePaymentSummary in unProcessedCompanyPaymentSummaries)
                                        {
                                            companyPackagePaymentSummary.IsMonthlyAgentProcessed = true;
                                            if (invoice != null)
                                            {
                                                companyPackagePaymentSummary.Invoice = invoice;
                                            }

                                            companyPackagePaymentSummary.LastUpdatedDate = Utils.Today;
                                            companyPackagePaymentSummary.LastUpdatedBy   = 0;
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                AgentErrorLog.WriteToErrorLog("Failed to create Invoice for projectId" + company.CompanyId);
                                AgentErrorLog.HandleException(ex);
                                isPaymentSuccess = false;
                            }
                        }
                        //Complete upto now.
                        dataContext.SaveChanges();
                    }
                    //Get all the Unprocessed Invoices to send to the payment gateway.
                    invoiceList = FinanceSupport.GetUnProcessedInvoicesByRelatedTable("Company", companyId, "PACKAGEFEE", dataContext);
                }
                else
                {
                    int companyStatusCodeID = 0;
                    if (!isManualPayment)
                    {
                        //Not Manual means, Payment Retry.
                        companyStatusCodeID = Utils.GetCodeByValue("CompanyStatus", "GRACEPERIOD").CodeId;
                    }

                    //Get all the Unprocessed Invoices to send to the payment gateway.
                    //For Grace period payment Retry process projectId is 0.
                    invoiceList = FinanceSupport.GetPaymentFailedInvoices("PACKAGEFEE", companyStatusCodeID, companyId, "Company", dataContext);
                }

                //Because we need Payment Log records before process Invoices.
                foreach (Invoice invoice in invoiceList)
                {
                    FinanceSupport.CreatePaymentLog(invoice.InvoiceID, dataContext);
                }
                dataContext.SaveChanges();

                //Get distinct company Ids within the unprocessed invoice list
                var companyIds = invoiceList.Select(inv => inv.RelatedID).Distinct();

                foreach (int distinctCompanyId in companyIds)
                {
                    isPaymentSuccess = ProcessInvoicesByCompany(invoiceList, distinctCompanyId, isManualPayment, dataContext);
                    if (isPaymentSuccess)
                    {
                        CompanyBL companyBL = new CompanyBL(dataContext);
                        companyBL.ActivateUnProcessedSummaries(distinctCompanyId, userId);
                    }
                }

                dataContext.SaveChanges();
                //For the Monthly Agent Runner the return value is not important but for the manual payment.
                return(isPaymentSuccess);
            }
        }