Esempio n. 1
0
        /// <summary>
        /// Handles the Click event of the lnkbtnPayNow control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void lnkbtnPayNow_Click(object sender, EventArgs e)
        {
            CreditCardToken companyCreditCardToken = FinanceSupport.GetCreditCardToken("Company", CompanyId);

            //Check whether payments are setup and display message if required.
            if (companyCreditCardToken == null)
            {
                popupNotification.Title = "Set up Payments";
                ltrlNotification.Text   = "Please set up payment details for the Company in order to make payments.";
                popupNotification.ShowPopup();
                return;
            }

            popupMakePayment.ShowPopup();
        }
Esempio n. 2
0
        /// <summary>
        /// Handles the NeedDataSource event of the gvProjects control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="Telerik.Web.UI.GridNeedDataSourceEventArgs"/> instance containing the event data.</param>
        protected void gvProjects_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            if (!StopProcessing)
            {
                #region Fill global variables required for data binding

                freeTrialCodeId        = Support.GetCodeByValue("ProjectStatus", "FREETRIAL").CodeId;
                activeCodeId           = Support.GetCodeByValue("ProjectStatus", "ACTIVE").CodeId;
                gracePeriodCodeId      = Support.GetCodeByValue("ProjectStatus", "GRACEPERIOD").CodeId;
                paymentFailed          = Support.GetCodeByValue("ProjectStatus", "PAYMENTFAILED").CodeId;
                suspendCodeId          = Support.GetCodeByValue("ProjectStatus", "SUSPENDED").CodeId;
                closedCodeId           = Support.GetCodeByValue("ProjectStatus", "CLOSED").CodeId;
                companyCreditCardToken = FinanceSupport.GetCreditCardToken("Company", CompanyId);

                #endregion Fill global variables required for data binding

                switch (ProjectsDisplayMode)
                {
                case ProjectsViewMode.ActiveProjects:
                    projectStatusList.Add(freeTrialCodeId);
                    projectStatusList.Add(activeCodeId);
                    projectStatusList.Add(gracePeriodCodeId);
                    projectStatusList.Add(paymentFailed);
                    projectStatusList.Add(suspendCodeId);
                    break;

                case ProjectsViewMode.ClosedProjects:
                    projectStatusList.Add(closedCodeId);
                    break;

                case ProjectsViewMode.AllProjects:
                    projectStatusList.Add(freeTrialCodeId);
                    projectStatusList.Add(activeCodeId);
                    projectStatusList.Add(gracePeriodCodeId);
                    projectStatusList.Add(paymentFailed);
                    projectStatusList.Add(suspendCodeId);
                    projectStatusList.Add(closedCodeId);
                    break;
                }
                List <CompanyProjectDetails> projects = this.GetBL <FinanceBL>().GetCompanyProjectDetails(CompanyId, projectStatusList);

                gvProjects.DataSource = projects;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Loads the data.
        /// </summary>
        public void LoadData()
        {
            StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == ProjectID).FirstOrDefault();
            bool paymentsSpecified         = (FinanceSupport.GetCreditCardToken("Company", project.CompanyId) != null);

            ProjectStatusHandler.ProjectWarningInfo warningInfo = ProjectStatusHandler.GetProjectWarningStatus(project.ProjectStatusCodeId, project.ProjectTypeCodeId == Support.GetCodeByValue("ProjectType", "FREETRIALOPTIN").CodeId, project.ExpirationDate);
            StageBitz.Data.User companyAdmin = this.GetBL <CompanyBL>().GetCompanyPrimaryAdministrator(project.CompanyId);

            ProjectName       = Support.TruncateString(project.ProjectName, 30);
            RemainingDays     = string.Format("{0} day{1}", warningInfo.DaysToExpiration < 0 ? 0 : warningInfo.DaysToExpiration, warningInfo.DaysToExpiration == 1 ? string.Empty : "s");
            CompanyAdminName  = Support.TruncateString((companyAdmin.FirstName + " " + companyAdmin.LastName).Trim(), 30);
            CompanyAdminEmail = companyAdmin.Email1;
            PaymentFailedDate = null;

            CompanyFinancialUrl = ResolveUrl(string.Format("~/Company/CompanyFinancialDetails.aspx?companyid={0}", project.CompanyId));

            if (warningInfo.WarningStatus == ProjectStatusHandler.ProjectWarningStatus.NoWarning)
            {
                noticesMultiView.Visible = false;
                return;
            }
            else
            {
                noticesMultiView.Visible = true;
            }

            #region Determine User Permission Type

            ProjectPermission userType = ProjectPermission.Staff;
            if (Support.IsCompanyAdministrator(project.CompanyId))
            {
                userType = ProjectPermission.CompanyAdministrator;
            }
            else if (Support.IsProjectAdministrator(ProjectID))
            {
                userType = ProjectPermission.ProjectAdministrator;
            }
            else
            {
                userType = ProjectPermission.Staff;
            }

            #endregion Determine User Permission Type

            switch (warningInfo.WarningStatus)
            {
            case ProjectStatusHandler.ProjectWarningStatus.FreeTrialGrace:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.FreeTrialGraceCompanyAdmin;
                }
                break;

            case ProjectStatusHandler.ProjectWarningStatus.GracePeriod:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.GracePeriodCompanyAdmin;
                    ucCompanyPaymentFailedWarningGracePeriodCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningGracePeriodCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.CompanyAdministrator,
                                                                                  CompanyPaymentFailedWarning.DisplayMode.PaymentFailedGracePeriod);
                }
                else if (userType == ProjectPermission.ProjectAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.GracePeriodProjectAdmin;
                    ucCompanyPaymentFailedWarningGracePeriodNonCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningGracePeriodNonCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.NonCompanyAdministrator,
                                                                                     CompanyPaymentFailedWarning.DisplayMode.PaymentFailedGracePeriod);
                }
                PaymentFailedDate = project.ExpirationDate.Value.AddDays(-7);
                break;

            case ProjectStatusHandler.ProjectWarningStatus.PaymentFailed:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.PaymentFailedCompanyAdmin;
                    ucCompanyPaymentFailedWarningPaymentFailedCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningPaymentFailedCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.CompanyAdministrator,
                                                                                    CompanyPaymentFailedWarning.DisplayMode.PaymentFailed);
                }
                else if (userType == ProjectPermission.ProjectAdministrator || userType == ProjectPermission.Staff)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.PaymentFailedProjectStaff;
                    ucCompanyPaymentFailedWarningPaymentFailedNonCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningPaymentFailedNonCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.NonCompanyAdministrator,
                                                                                       CompanyPaymentFailedWarning.DisplayMode.PaymentFailed);
                }

                break;

            case ProjectStatusHandler.ProjectWarningStatus.Suspended:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.SuspendedCompanyAdmin;
                }
                else if (userType == ProjectPermission.ProjectAdministrator || userType == ProjectPermission.Staff)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.SuspendedProjectStaff;
                }
                break;

            case ProjectStatusHandler.ProjectWarningStatus.Closed:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.ClosedProjectCompanyAdmin;
                }
                break;
            }

            //If the project's payment has failed, calculate the number of days the payment is due.
            if (PaymentFailedDate != null)
            {
                int paymentOverdueDays = (int)(Today - PaymentFailedDate.Value).TotalDays;
                PaymentOverdueDays = string.Format("{0} day{1}", paymentOverdueDays, paymentOverdueDays == 1 ? string.Empty : "s");
            }

            upnlProjectWarningDisplay.Update();
        }
Esempio n. 4
0
        private void LoadData()
        {
            StageBitz.Data.Company company = DataContext.Companies.Where(c => c.CompanyId == CompanyId).FirstOrDefault();

            #region Header Details

            Support.AssignTextToLabel(lblCompanyName, company.CompanyName, 80);

            if (company.CreatedByUserId == null)
            {
                lblCreatedBy.Text = "System";
            }
            else
            {
                StageBitz.Data.User user = DataContext.Users.Where(u => u.UserId == company.CreatedByUserId).FirstOrDefault();
                string userFullName      = (user.FirstName + " " + user.LastName).Trim();

                Support.AssignTextToLabel(lblCreatedBy, userFullName, 80);
            }

            ltrlCreatedDate.Text = Support.FormatDate(company.CreatedDate);

            int invoiceFailedCodeId = Utils.GetCodeIdByCodeValue("InvoiceStatus", "FAILED");
            //Check if there any pending invoice exist
            int paymentFailedInvoiceCount = (from i in DataContext.Invoices
                                             join p in DataContext.Projects on i.RelatedID equals p.ProjectId
                                             where i.RelatedTableName == "Project" && i.InvoiceStatusCodeId == invoiceFailedCodeId && p.CompanyId == CompanyId
                                             select i).Count();

            if (paymentFailedInvoiceCount == 1)
            {
                imgPaymentError.Attributes.Add("Title", "There is a project with a payment failure.");
            }
            else if (paymentFailedInvoiceCount > 1)
            {
                imgPaymentError.Attributes.Add("Title", "There are projects with payment failures.");
            }
            else if (FinanceSupport.GetCreditCardToken("Company", CompanyId) == null)
            {
                imgPaymentError.Attributes.Add("Title", "Credit card details not provided.");
            }
            else
            {
                imgPaymentError.Visible = false;
            }
            #endregion

            #region Contact Details

            int truncateLength = 30;
            Support.AssignTextToLabel(lblAddressLine1, company.AddressLine1, truncateLength);
            Support.AssignTextToLabel(lblAddressLine2, company.AddressLine2, truncateLength);
            Support.AssignTextToLabel(lblCity, company.City, truncateLength);
            Support.AssignTextToLabel(lblState, company.State, truncateLength);
            Support.AssignTextToLabel(lblPostCode, company.PostCode, truncateLength);

            if (company.Country != null)
            {
                Support.AssignTextToLabel(lblCountry, company.Country.CountryName, truncateLength);
            }

            Support.AssignTextToLabel(lblPhone, company.Phone, truncateLength);
            Support.AssignTextToLabel(lblWebsite, company.Website, truncateLength);

            #endregion

            SetCompanySuspensionCheckBox();

            LoadCompanyAdministrators();
        }
Esempio n. 5
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);
        }
Esempio n. 6
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);
            }
        }