Calculate Your Additional Cash Flow When Using bpmPro Contractor

STEP 1

Select Sales and Order Volume

Total number of qualified leads that your company generates per week from all marketing sources.
Average number of quotes or proposals you typically produce for prospecting clients.
Your average sales-to-lead conversion rate for your entire sales team.
The average number of purchase orders that a job generates, sourcing products and materials from vendors.
STEP 2

Select Current Staff Details

Each Sales Representative will have an individual license.
Average salary rate paid to administrative and project management staff.
Run  Calculator
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Now, Book A Demo

Experience the Power of xTriam's bpmPro Contractor

Schedule a demo via Zoom or a in-person meeting within South Florida, with a window industry veteran who understands your pain points firsthand.

Witness bpmPro Contractor in action and learn how xTriam can streamline your operations, reduce your stress, and boost your cash flow.

$(document).ready(function() { $('#update').click(function(event) { // Variables initialization var leadsPerWeek = parseFloat($('#leadsPerWeek').val()); var quotesPerLead = parseFloat($('#quotesPerLead').val()); var conversionRate = parseFloat($('#conversionRate').val()); var ordersPerContract = parseFloat($('#ordersPerContract').val()); var replacementHourlyRate = parseFloat($('#replacementHourlyRate').val()); var numSalesReps = parseFloat($('#numSalesReps').val()); // Validation check if (isNaN(leadsPerWeek) || isNaN(quotesPerLead) || isNaN(conversionRate) || isNaN(ordersPerContract) || isNaN(replacementHourlyRate) || isNaN(numSalesReps)) { alert('You are missing fields to fill out. Please review and try again!'); return; } // Calculations var numContracts = leadsPerWeek * (conversionRate / 100); var numOrders = numContracts * ordersPerContract; var numQuotes = leadsPerWeek * quotesPerLead; var engClientHRsEnterpriseSalesTeam = ((numQuotes * 0.88 + numContracts * 0.3833) * 4.3333).toFixed(4); var engagingClientHoursEnterprise = (leadsPerWeek * 0.6667 * 4.3333).toFixed(4); var closingDealHoursEnterprise = (numContracts * 0.5167 * 4.3333).toFixed(4); var managingOrderHoursEnterprise = (numOrders * 1.2667 * 4.3333).toFixed(4); var deliveringServiceHoursEnterprise = (numContracts * 2.5833 * 4.3333).toFixed(4); var closingProjectHoursEnterprise = (numContracts * 0.8833 * 4.3333).toFixed(4); var adminHoursEnterprise = ((1.75 * numContracts + 3) * 4.3333).toFixed(4); var savedHoursMonthlyEnterprise = ( parseFloat(engagingClientHoursEnterprise) + parseFloat(closingDealHoursEnterprise) + parseFloat(managingOrderHoursEnterprise) + parseFloat(deliveringServiceHoursEnterprise) + parseFloat(closingProjectHoursEnterprise) + parseFloat(adminHoursEnterprise) ).toFixed(4); var savingsMonthlyEnterprise = (savedHoursMonthlyEnterprise * replacementHourlyRate).toFixed(4); var bpmProMonthlySubscriptionEnterprise = (495 + numSalesReps * 100).toFixed(4); var netSavingsEnterprise = (savingsMonthlyEnterprise - bpmProMonthlySubscriptionEnterprise).toFixed(4); // Update UI elements with calculated values $('#displayQuotesPerLead').text(quotesPerLead); $('#displayNumQuotes').text(numQuotes); $('#displayEngClientHRsEnterpriseSalesTeam').text(engClientHRsEnterpriseSalesTeam); $('#displayEngagingClientHoursEnterprise').text(engagingClientHoursEnterprise); $('#displayNumOrders').text(numOrders); $('#savingsMonthlyEnterprise').text(Number(savingsMonthlyEnterprise).toLocaleString('en-US', {style: 'currency', currency: 'USD'})); $('#netSavingsEnterprise').text(Number(netSavingsEnterprise).toLocaleString('en-US', {style: 'currency', currency: 'USD'})); $('#bpmProMonthlySubscriptionEnterprise').text(Number(bpmProMonthlySubscriptionEnterprise).toLocaleString('en-US', {style: 'currency', currency: 'USD'})); // Display other calculated metrics $('#engagingClientHoursEnterprise').text(Number(engagingClientHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#closingDealHoursEnterprise').text(Number(closingDealHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#managingOrderHoursEnterprise').text(Number(managingOrderHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#deliveringServiceHoursEnterprise').text(Number(deliveringServiceHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#closingProjectHoursEnterprise').text(Number(closingProjectHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#adminHoursEnterprise').text(Number(adminHoursEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); $('#savedHoursMonthlyEnterprise').text(Number(savedHoursMonthlyEnterprise).toLocaleString(undefined, {maximumFractionDigits: 0})); // Chart update for Enterprise Data var enterpriseData = [ engagingClientHoursEnterprise, closingDealHoursEnterprise, // Include this new category managingOrderHoursEnterprise, deliveringServiceHoursEnterprise, closingProjectHoursEnterprise, adminHoursEnterprise ]; var ctx = document.getElementById('enterpriseChart').getContext('2d'); // If a chart instance already exists, destroy it before creating a new one to ensure the chart updates correctly if(window.myEnterpriseChart instanceof Chart) { window.myEnterpriseChart.destroy(); } window.myEnterpriseChart = new Chart(ctx, { type: 'bar', data: { labels: ['Engaging Clients', 'Closing Deals', 'Managing Orders', 'Delivering Service', 'Closing Projects', 'Admin Work'], // Updated labels array datasets: [{ label: '# of Saved Hours', data: enterpriseData.map(Number), borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } } } }); }); });