Пример #1
0
        public static string GetPersonUrl <T>(this IBasicEmail mail, T model) where T : OrganizationPersonOutput, new()
        {
            var token = FlowExtensions.GetRole(typeof(T));
            var path  = FlowExtensions.GetPath(typeof(T));

            return($"{mail.FlowUrl}{model.TargetOrganizationId}/{token.GetDescription()}/people/{model.PersonId}/peopledetails");
        }
Пример #2
0
        public static IHtmlContent ProposalRejected <T>(this IBasicEmail email,
                                                        T proposal) where T : FixedPriceProposalOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.Customer:
                message = $"You have rejected the proposal from {proposal.ProjectManagerOrganizationName}";
                break;

            case FlowRoleToken.AccountManager:
            case FlowRoleToken.ProjectManager:
            case FlowRoleToken.AgencyOwner:
                message = "A proposal has been rejected";
                break;
            }

            var link    = email.GetProposalUrl(proposal);
            var details = proposal.ProposalDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, details));
        }
Пример #3
0
        public static string GetInvoiceUrl <T>(this IBasicEmail mail, T model) where T : ProjectInvoiceOutput, new()
        {
            var token = FlowExtensions.GetRole(typeof(T));
            var path  = FlowExtensions.GetPath(typeof(T));

            return($"{mail.FlowUrl}{model.TargetOrganizationId}/{token.GetDescription()}/{path}/{model.Id}/invoicedetails");
        }
Пример #4
0
        public static IHtmlContent CandidateRejected <T>(this IBasicEmail email, T model) where T : CandidateOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.Recruiter:
                message = "Your candidate was rejected";
                break;

            case FlowRoleToken.RecruitingAgencyOwner:
                message = "Your candidate was rejected";
                break;

            case FlowRoleToken.AgencyOwner:
                message = "Your candidate was rejected";
                break;

            case FlowRoleToken.AccountManager:
                message = "Your candidate was rejected";
                break;
            }

            var link = email.GetCandidateUrl(model);

            return(TemplateHelpers.TwoParagraph(message, link));
        }
Пример #5
0
        public static IHtmlContent LeadQualified <T>(this IBasicEmail email, T model) where T : LeadOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message    = "";
            var streamName = "";
            var stream     = 0m;
            var bonus      = 0m;
            var bonusName  = "";

            switch (role)
            {
            case FlowRoleToken.Marketer:
                bonus      = model.MarketerBonus;
                stream     = model.MarketerStream;
                streamName = "MA Stream";
                bonusName  = "MA Bonus";
                message    = "Your lead was qualified";
                break;

            case FlowRoleToken.MarketingAgencyOwner:
                bonus      = model.MarketingAgencyBonus;
                stream     = model.MarketingAgencyStream;
                streamName = "MAO Stream";
                bonusName  = "MAO Bonus";
                message    = "Your marketer's lead was qualified";
                break;

            case FlowRoleToken.AgencyOwner:
                bonus      = model.MarketingBonus;
                stream     = model.MarketingStream;
                streamName = "Marketing Stream";
                bonusName  = "Marketing Bonus";
                message    = "Your lead was successfully assigned";
                break;

            case FlowRoleToken.AccountManager:
                bonus      = model.MarketingBonus;
                stream     = model.MarketingStream;
                streamName = "Marketing Stream";
                bonusName  = "Marketing Bonus";
                message    = "A new Opportunity was assigned to you.";
                break;

            case FlowRoleToken.None:
                break;
            }

            var link = email.GetLeadUrl(model);

            var contractDetails = model.LeadDetails(stream, streamName, bonus, bonusName);

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #6
0
        public static IHtmlContent CandidateQualified <T>(this IBasicEmail email, T model) where  T : CandidateOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message    = "";
            var streamName = "";
            var stream     = 0m;
            var bonus      = 0m;
            var bonusName  = "";

            switch (role)
            {
            case FlowRoleToken.Recruiter:
                bonus      = model.RecruiterBonus;
                stream     = model.RecruiterStream;
                streamName = "RE Stream";
                bonusName  = "RE Bonus";
                message    = "Your candidate was qualified";
                break;

            case FlowRoleToken.RecruitingAgencyOwner:
                bonus      = model.RecruitingAgencyBonus;
                stream     = model.RecruitingAgencyStream;
                streamName = "RAO Stream";
                bonusName  = "RAO Bonus";
                message    = "Your candidate was qualified";
                break;

            case FlowRoleToken.AgencyOwner:
                bonus      = model.RecruitingBonus;
                stream     = model.RecruitingStream;
                streamName = "Recruiting Stream";
                bonusName  = "Recruiting Bonus";
                message    = "Your candidate was successfully assigned";
                break;

            case FlowRoleToken.ProjectManager:
                bonus      = 0;
                stream     = 0;
                streamName = "Recruiting Stream";
                bonusName  = "Recruiting Bonus";
                message    = "A new Candidate was assigned to you for screening.";
                break;
            }

            var link = email.GetCandidateUrl(model);

            var contractDetails = model.CandidateDetails(stream, streamName, bonus, bonusName);

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #7
0
        public static IHtmlContent ProjectCreated <T>(this IBasicEmail email, T project) where T : ProjectOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            default:
                message = "A new project was created";
                break;
            }

            var link    = email.GetProjectUrl(project);
            var details = project.ProjectDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, details));
        }
Пример #8
0
        public static IHtmlContent InvoiceCreated <T>(this IBasicEmail email, T model)
            where T : ProjectInvoiceOutput, new()
        {
            var role    = FlowExtensions.GetRole(typeof(T));
            var message = "";

            switch (role)
            {
            case FlowRoleToken.AccountManager:
            case FlowRoleToken.AgencyOwner:
                message = $"A new invoice was created";
                break;
            }

            var link = email.GetInvoiceUrl(model);

            return(TemplateHelpers.TwoParagraph(message, link));
        }
Пример #9
0
        public static IHtmlContent CandidateCreated <T>(this IBasicEmail email, T model)
            where T : CandidateOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));


            var message    = "";
            var streamName = "";
            var stream     = 0m;
            var bonus      = 0m;
            var bonusName  = "";

            switch (role)
            {
            case FlowRoleToken.Recruiter:
                bonus      = model.RecruiterBonus;
                stream     = model.RecruiterStream;
                streamName = "RE Stream";
                bonusName  = "RE Bonus";
                message    = "A new candidate was created";
                break;

            case FlowRoleToken.RecruitingAgencyOwner:
                bonus      = model.RecruitingAgencyBonus;
                stream     = model.RecruitingAgencyStream;
                streamName = "RAO Stream";
                bonusName  = "RAO Bonus";
                message    = "A new candidate was created by one of your organization's recruiters";
                break;

            case FlowRoleToken.AgencyOwner:
                bonus      = model.RecruitingBonus;
                stream     = model.RecruitingStream;
                streamName = "Recruiting Stream";
                bonusName  = "Recruiting Bonus";
                message    = "You have a new candidate ready to be qualified";
                break;
            }
            var link = email.GetCandidateUrl(model);

            var contractDetails = model.CandidateDetails(stream, streamName, bonus, bonusName);

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #10
0
        public static IHtmlContent LeadCreated <T>(this IBasicEmail email, T model) where T : LeadOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message    = "";
            var streamName = "";
            var stream     = 0m;
            var bonus      = 0m;
            var bonusName  = "";

            switch (role)
            {
            case FlowRoleToken.Marketer:
                bonus      = model.MarketerBonus;
                stream     = model.MarketerStream;
                streamName = "MA Stream";
                bonusName  = "MA Bonus";
                message    = "A new lead was created";
                break;

            case FlowRoleToken.MarketingAgencyOwner:
                bonus      = model.MarketingAgencyBonus;
                stream     = model.MarketingAgencyStream;
                streamName = "MAO Stream";
                bonusName  = "MAO Bonus";
                message    = "A new lead was created";
                break;

            case FlowRoleToken.AgencyOwner:
                bonus      = model.MarketingBonus;
                stream     = model.MarketingStream;
                streamName = "Marketing Stream";
                bonusName  = "Marketing Bonus";
                message    = "You have a new lead";
                break;
            }

            var link = email.GetLeadUrl(model);

            var contractDetails = model.LeadDetails(stream, streamName, bonus, bonusName);

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #11
0
        public static IHtmlContent StoryCompleted <T>(this IBasicEmail email,
                                                      T story) where T : StoryOutput, new()
        {
            var role    = FlowExtensions.GetRole(typeof(T));
            var message = "";

            switch (role)
            {
            case FlowRoleToken.AccountManager:
            case FlowRoleToken.ProjectManager:
            case FlowRoleToken.AgencyOwner:
                message = "A story has been completed";
                break;
            }
            var link = email.GetStoryUrl(story);

            var contractDetails = story.StoryDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #12
0
        public static IHtmlContent WorkOrderRejected <T>(this IBasicEmail email,
                                                         T entry) where T : WorkOrderOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            default:
                message = $"Your work order was rejected";
                break;
            }

            var link = email.GetWorkOrderUrl(entry);

            var workEntryDetails = entry.WorkOrderDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, workEntryDetails));
        }
Пример #13
0
        public static IHtmlContent ContractRestarted <T>(this IBasicEmail email, T model) where T : ContractOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.Contractor:
                message = $"Your contact was restarted";
                break;

            default:
                message = "A contract was ended";
                break;
            }

            var link = email.GetContractUrl(model);

            return(TemplateHelpers.TwoParagraph(message, link));
        }
Пример #14
0
        public static IHtmlContent StoryCreated <T>(this IBasicEmail email, T story) where T : StoryOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.AgencyOwner:
                message = "A story was created in your organization";
                break;

            default:
                message = "A new story was created";
                break;
            }
            var link = email.GetStoryUrl(story);

            var contractDetails = story.StoryDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }
Пример #15
0
        public static IHtmlContent InvoiceFinalized <T>(this IBasicEmail email, T model)
            where T : ProjectInvoiceOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.Customer:
                message = $"You have a new invoice from {model.ProviderOrganizationName}";
                break;

            case FlowRoleToken.AccountManager:
            case FlowRoleToken.AgencyOwner:
                message = $"Invoice: {model.Number} was sent to {model.CustomerOrganizationName}";
                break;
            }

            var link = email.GetInvoiceUrl(model);

            return(TemplateHelpers.TwoParagraph(message, link));
        }
Пример #16
0
        public static IHtmlContent ProposalSent <T>(this IBasicEmail email,
                                                    T proposal) where T : FixedPriceProposalOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message = "";

            switch (role)
            {
            case FlowRoleToken.Customer:
                message = "You have a new proposal";
                break;

            case FlowRoleToken.AccountManager:
            case FlowRoleToken.ProjectManager:
                message = "The proposal was sent";
                break;


            case FlowRoleToken.AgencyOwner:
                message = "A proposal has sent to your customer";
                break;
            }
            var link = string.Empty;

            if (role == FlowRoleToken.Customer)
            {
                link = email.GetPublicProposalUrl(proposal);
            }
            else
            {
                link = email.GetProposalUrl(proposal);
            }
            var details = proposal.ProposalDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, details));
        }
Пример #17
0
        public static IHtmlContent WorkOrderCreated <T>(this IBasicEmail email,
                                                        T entry) where T : WorkOrderOutput, new()
        {
            var role    = FlowExtensions.GetRole(typeof(T));
            var message = "";

            switch (role)
            {
            case FlowRoleToken.Customer:
                message = $"You submitted a work order to {entry.AccountManagerOrganizationName}";
                break;

            default:
                message = "A new Work Order was created";
                break;
            }


            var link = email.GetWorkOrderUrl(entry);

            var workEntryDetails = entry.WorkOrderDetails();

            return(TemplateHelpers.ThreeParagraph(message, link, workEntryDetails));
        }
Пример #18
0
        public static IHtmlContent TimeEntryApproved <T>(this IBasicEmail email,
                                                         T entry) where T : TimeEntryOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var message    = "";
            var streamName = "";
            var stream     = 0m;

            switch (role)
            {
            case FlowRoleToken.Contractor:
                stream     = entry.TotalContractorStream;
                streamName = "CO Stream";
                message    = $"Your time entry was approved";
                break;

            case FlowRoleToken.AccountManager:
                stream     = entry.TotalAccountManagerStream;
                streamName = "AM Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.ProjectManager:
                stream     = entry.TotalProjectManagerStream;
                streamName = "PM Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.AgencyOwner:
                stream     = entry.TotalAgencyStream;
                streamName = "AO Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.Customer:
                stream     = entry.TotalCustomerAmount;
                streamName = "Amount";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.Recruiter:
                stream     = entry.TotalRecruiterStream;
                streamName = "RE Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.Marketer:
                stream     = entry.TotalMarketerStream;
                streamName = "MA Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.MarketingAgencyOwner:
                stream     = entry.TotalMarketingAgencyStream;
                streamName = "MAO Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;

            case FlowRoleToken.RecruitingAgencyOwner:
                stream     = entry.TotalRecruitingAgencyStream;
                streamName = "RAO Stream";
                message    = $"A time entry of {entry.TotalHours.ToString("N2")} Hours was approved";
                break;
            }

            var link        = email.GetTimeEntryUrl(entry);
            var timeDetails = entry.TimeEntryDetails(stream, streamName);

            return(TemplateHelpers.ThreeParagraph(message, link, timeDetails));
        }
        public static IHtmlContent WorkOrderDetails <T>(this T model)
            where T : WorkOrderOutput, new()
        {
            int number = model.ProviderNumber;
            var role   = FlowExtensions.GetRole(typeof(T));

            switch (role)
            {
            case FlowRoleToken.Customer:
                number = model.BuyerNumber;
                break;
            }

            var table = new TagBuilder("table");

            table.Attributes["border"] = "1";
            table.MergeAttribute(
                "style",
                $"border-collapse: collapse;border: 1px solid black");

            var headers = new TagBuilder("tr");

            headers.MergeAttribute(
                "style",
                RowHeaderStyle);

            var cells = new TagBuilder("tr");

            cells.MergeAttribute("style", RowCellsStyle);


            var accountManagerHeader = new TagBuilder("th");

            accountManagerHeader.MergeAttribute(
                "style",
                ColumnHeaderStyle);

            var numberHeader = new TagBuilder("th");

            accountManagerHeader.MergeAttribute(
                "style",
                ColumnHeaderStyle);

            var customerHeader = new TagBuilder("th");

            customerHeader.MergeAttribute(
                "style",
                ColumnHeaderStyle);


            var accountManagerCell = new TagBuilder("td");

            accountManagerCell.MergeAttribute(
                "style",
                CellStyle);

            var numberCell = new TagBuilder("td");

            accountManagerCell.MergeAttribute(
                "style",
                CellStyle);


            var customerCell = new TagBuilder("td");

            customerCell.MergeAttribute(
                "style",
                CellStyle);

            accountManagerCell.InnerHtml.Append($"{model.AccountManagerName}");
            customerCell.InnerHtml.Append($"{model.CustomerName}");
            numberCell.InnerHtml.Append($"{number}");

            accountManagerHeader.InnerHtml.Append($"AM [{model.AccountManagerOrganizationName}]");
            customerHeader.InnerHtml.Append($"CU [{model.CustomerOrganizationName}]");
            numberHeader.InnerHtml.Append($"Number");

            headers.InnerHtml.AppendHtml(numberHeader);
            headers.InnerHtml.AppendHtml(accountManagerHeader);
            headers.InnerHtml.AppendHtml(customerHeader);

            cells.InnerHtml.AppendHtml(numberCell);
            cells.InnerHtml.AppendHtml(accountManagerCell);
            cells.InnerHtml.AppendHtml(customerCell);

            table.InnerHtml.AppendHtml(headers);
            table.InnerHtml.AppendHtml(cells);

            return(table);
        }
Пример #20
0
        public static IHtmlContent LeadDetails <T>(this T lead, decimal stream, string streamName, decimal bonus,
                                                   string bonusName)
            where T : LeadOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var table   = new TagBuilder("table");
            var cells   = new TagBuilder("tr");
            var headers = new TagBuilder("tr");

            table.Attributes["border"] = "1";
            table.MergeAttribute(
                "style",
                TableStyle);

            headers.MergeAttribute(
                "style",
                RowHeaderStyle);

            cells.MergeAttribute(
                "style",
                RowCellsStyle);


            var customerHeader = new TagBuilder("th");

            customerHeader.MergeAttribute("style", ColumnHeaderStyle);

            var customerCell = new TagBuilder("td");

            customerCell.MergeAttribute("style", CellStyle);

            var bonusHeader = new TagBuilder("th");

            bonusHeader.MergeAttribute("style", ColumnHeaderStyle);

            var streamHeader = new TagBuilder("th");

            streamHeader.MergeAttribute("style", ColumnHeaderStyle);

            var marketerHeader = new TagBuilder("th");

            marketerHeader.MergeAttribute("style", ColumnHeaderStyle);

            var bonusCell = new TagBuilder("td");

            bonusCell.MergeAttribute("style", CellStyle);

            var streamCell = new TagBuilder("td");

            streamCell.MergeAttribute("style", CellStyle);

            var marketerCell = new TagBuilder("td");

            marketerCell.MergeAttribute("style", CellStyle);

            headers.InnerHtml.AppendHtml(customerHeader);
            headers.InnerHtml.AppendHtml(bonusHeader);
            headers.InnerHtml.AppendHtml(streamHeader);
            headers.InnerHtml.AppendHtml(marketerHeader);

            cells.InnerHtml.AppendHtml(customerCell);
            cells.InnerHtml.AppendHtml(bonusCell);
            cells.InnerHtml.AppendHtml(streamCell);
            cells.InnerHtml.AppendHtml(marketerCell);

            bonusCell.InnerHtml.Append(bonus.ToString("C"));
            marketerCell.InnerHtml.Append(lead.MarketerName);
            bonusHeader.InnerHtml.Append(bonusName);
            streamCell.InnerHtml.Append(stream.ToString("C"));
            marketerHeader.InnerHtml.Append($"Marketer [{lead.MarketerOrganizationName}]");
            streamHeader.InnerHtml.Append(streamName);
            customerHeader.InnerHtml.Append("Lead Name");
            customerCell.InnerHtml.Append($"{lead.FirstName} {lead.LastName} ({lead.OrganizationName})");

            table.InnerHtml.AppendHtml(headers);
            table.InnerHtml.AppendHtml(cells);

            return(table);
        }
Пример #21
0
        public static IHtmlContent ContractCreated <T>(this IBasicEmail email,
                                                       T model) where T : ContractOutput, new()
        {
            var role = FlowExtensions.GetRole(typeof(T));

            var     message    = $"A new contract was added, see the terms below";
            decimal rate       = 0;
            string  streamName = "CO";

            switch (role)
            {
            case FlowRoleToken.Contractor:
                rate       = model.ContractorStream;
                streamName = "Hourly Rate (CO Stream)";
                message    = $@"You have been added to a project. The terms of the contract below:";
                break;

            case FlowRoleToken.AgencyOwner:
                rate       = model.AgencyStream;
                streamName = "PAO Stream";
                break;

            case FlowRoleToken.AccountManager:
                rate       = model.AccountManagerStream;
                streamName = "AM Stream";
                break;

            case FlowRoleToken.ProjectManager:
                rate       = model.ProjectManagerStream;
                streamName = "PM Stream";
                break;

            case FlowRoleToken.Customer:
                rate       = model.CustomerRate;
                streamName = "Hourly Rate";
                break;

            case FlowRoleToken.Recruiter:
                rate       = model.ContractorStream;
                streamName = "RE Stream";
                break;

            case FlowRoleToken.Marketer:
                rate       = model.ContractorStream;
                message    = $"Your contractor, {model.ContractorName}, been added to a project";
                streamName = "MA Stream";
                break;

            case FlowRoleToken.MarketingAgencyOwner:
                rate       = model.ContractorStream;
                streamName = "MAO Stream";
                break;

            case FlowRoleToken.RecruitingAgencyOwner:
                rate       = model.ContractorStream;
                streamName = "RAO Stream";
                break;
            }


            var link = email.GetContractUrl(model);

            var contractDetails = model.ContractDetails(rate, streamName);

            return(TemplateHelpers.ThreeParagraph(message, link, contractDetails));
        }