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); }
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); } }
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); }
/// <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); } } }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
/// <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); }
/// <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); } }