I've upgraded our telerik controls to the AJAX version. However, I've noticed that the performance is slower. Is there something I'm doing wrong?
The RadScriptLibrary is being loaded from the MasterPage.master
Here is an example of the aspx and aspx.vb pages
ASPX:
<%--<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" %>
--%>
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" title="Request" %>
<%@ MasterType VirtualPath="~/MasterPage.master" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Project Request</title>
</head>
<body>
<form id="form1" runat="server">--%>
<asp:Content ID="Content1" Runat="Server" ContentPlaceHolderID="ContentPlaceHolder1">
<script type="text/javascript">
var needToConfirm = false;
window.onbeforeunload = confirmExit;
function confirmExit()
{
if (needToConfirm)
{
return "Changes will be lost if you don’t click on the ‘Save’-button";
}
}
function DatePicker_OnDateSelected(pickerInstance, args)
{
needToConfirm = true;
}
function ResetConfirmVar()
{
needToConfirm = true;
}
</script>
<asp:Label ID="lblEditStatus" runat="server" CssClass="editstatus"></asp:Label><br />
<div>
<asp:Button ID="btnSaveDraft" runat="server" CssClass="mybutton" Text="Save Draft" ValidationGroup="Top" />
<asp:Button ID="btnSubmit" runat="server" CssClass="mybutton" Text="Submit" />
<asp:Button ID="btnCalculateRates" runat="server" CssClass="mybutton" Text="Recalculate Rates" />
<asp:Button ID="btnApprove" runat="server" CssClass="mybutton" Text="Approve" />
<asp:Button ID="btnDeclined" runat="server" CssClass="mybutton" Text="Decline" />
<br />
<asp:Label ID="lblErrorMessage" runat="server" CssClass="errormessage" Text=""></asp:Label><br />
<table border="0" cellpadding="0" cellspacing="3">
<tr>
<td class="fieldlabeltext">
Request Status:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="txtRequestStatus" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
<td class="fieldlabeltext">
Project Number:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlJobNumber" runat="server" skin="Office2007"
DataSourceID="SDSJobNumbers"
Width="150px" Height="100px"
DataTextField="Project" DataValueField="Project" MarkFirstMatch="True"
AppendDataBoundItems="true">
<Items>
<Telerik:RadComboBoxItem Text="-Select One-" Value="0" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<asp:Label ID="lblJobNumber" runat="server" Text=""></asp:Label>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Project Name:</td>
<td class="emptycell">
</td>
<td>
<Telerik:RadTextBox ID="txtProjectName" runat="server" CssClass="fielddatatext" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" MaxLength="29" >
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" runat="server" ControlToValidate="txtProjectName"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Cost Center:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlCostCenterNames" runat="server"
datasourceid="SDSCostCenters" datatextfield="CostCenter" AppendDataBoundItems="true"
datavaluefield="ID" skin="Office2007" ValidationGroup="Top" >
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<%--<asp:DropDownList ID="ddlCostCenterNames" runat="server" DataSourceID="SDSCostCenters"
DataTextField="CostCenter" DataValueField="ID" AppendDataBoundItems="true" ValidationGroup="Top" AutoPostBack="true">
<asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
</asp:DropDownList>--%>
<asp:RequiredFieldValidator ID="RFVCostCenterNames" runat="server" ControlToValidate="ddlCostCenterNames"
ErrorMessage="*" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
Total Fees:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblFeesTotal" runat="server" CssClass="fieldlabeldata"></asp:Label>
<asp:LinkButton ID="btnRefresh" runat="server" CausesValidation="False" CssClass="selectbuttons">Refresh</asp:LinkButton>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 39px">
Client Name:</td>
<td class="emptycell" style="height: 39px">
</td>
<td>
<Telerik:radcombobox id="ddlClientName" runat="server" datasourceid="sdsCustomer" Width="200px" Height="100px"
datatextfield="Name" datavaluefield="CustId"
skin="Office2007"
tooltip="select client name" AppendDataBoundItems="true"
AllowCustomText="False" MarkFirstMatch="True" ValidationGroup="Top">
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
</Telerik:radcombobox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="ddlClientName"
ErrorMessage="*" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext" style="height: 39px">
Total Costs:</td>
<td class="emptycell" style="height: 39px">
</td>
<td>
<asp:Label ID="lblCostsTotal" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Projected Billings:</td>
<td class="emptycell">
</td>
<td>
<Telerik:RadNumericTextBox ID="numBillings" runat="server" Culture="English (United States)"
EmptyMessage="Enter billings"
MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext" ToolTip="Enter projected billings"
Type="Currency" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" >
<NumberFormat DecimalDigits="0" />
</Telerik:RadNumericTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="numBillings"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
Total Freelance Costs:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblTotalFreelanceFees" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 25px">
Projected Revenue:</td>
<td class="emptycell" style="height: 25px">
</td>
<td>
<Telerik:RadNumericTextBox ID="numRevenue" runat="server" Culture="English (United States)"
EmptyMessage="Enter revenue" Font-Names="Arial" Font-Size="11px" LabelCssClass="radLabelCss_JMW"
MaxLength="25" MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext"
ToolTip="Enter projected revenue" Type="Currency" ClientEvents-OnValueChanged="ResetConfirmVar" >
<NumberFormat DecimalDigits="0" />
</Telerik:RadNumericTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="numRevenue"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext" style="height: 25px">
Total 3rd Party Cost:</td>
<td class="emptycell" style="height: 25px">
</td>
<td>
<asp:Label ID="lblThirdParty" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Rate Card:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlRateCard" runat="server" datasourceid="sdsRateCards" ValidationGroup="Top"
datatextfield="code_value_desc" datavaluefield="rate_table_id"
skin="Office2007" AppendDataBoundItems="true">
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<%-- <asp:DropDownList ID="ddlRateCard" runat="server" DataSourceID="sdsRateCards"
DataTextField="code_value_desc" DataValueField="rate_table_id" AppendDataBoundItems="true" ValidationGroup="Top">
<asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
</asp:DropDownList>--%>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="ddlRateCard"
ErrorMessage="*" Height="1px" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
% of 3rd Party Costs to Revenue:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblThirdPartyRev" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 28px">
Rate Effective Date:</td>
<td class="emptycell" style="height: 28px">
</td>
<td>
<Telerik:raddatepicker id="dteRateEffectiveDate" runat="server" culture="English (United States)"
font-names="Arial" font-size="11px" mindate="" Skin="Office2007" >
<DATEINPUT Skin="Office2007" ValidationGroup="Top" />
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="dteRateEffectiveDate"
ErrorMessage="*" ValidationGroup="Top" ></asp:RequiredFieldValidator>
<br />
<br />
</td>
<td class="fieldlabeltext">
% not to Exceed</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltext">
This is a No Bid</td>
<td class="emptycell">
</td>
<td>
<asp:CheckBox ID="chkNoBid" runat="server" CssClass="fieldlabeldata" /></td>
<td class="fieldlabeltext">
Costs not to Exceed:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblCostsExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Expected Start Date:</td>
<td class="emptycell">
</td>
<td>
<Telerik:raddatepicker id="dteExpectedStartDte" runat="server" cssclass="fieldlabeldata"
tooltip="Select start date" Skin="Office2007">
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
LabelCssClass="radLabelCss_Office2007" />
<CALENDAR runat="server"
Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="dteExpectedStartDte"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Expected End Date:</td>
<td class="emptycell">
</td>
<td>
<Telerik:raddatepicker id="dteExpectedEndDte" runat="server" cssclass="fieldlabeldata"
tooltip="Select end date" Skin="Office2007">
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
LabelCssClass="radLabelCss_Office2007" />
<CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="dteExpectedEndDte"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltext" >
Description:</td>
<td class="emptycell" >
</td>
<td colspan="4">
<Telerik:RadTextBox ID="txtDescription" runat="server"
BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter description"
Font-Names="Arial" Font-Size="11px" MaxLength="99" Skin="Office2007" ClientEvents-OnValueChanged="ResetConfirmVar" Height="15px" Width="100%" >
<EmptyMessageStyle Font-Names="Arial,verdana" />
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox></td>
</tr>
<tr>
<td class="fieldlabeltext">
Approved By:</td>
<td class="emptycell">
</td>
<td style="width: 179px">
<asp:Label ID="lblApprovedName" runat="server"></asp:Label></td>
<td class="fieldlabeltext">
Approved Date:</td>
<td class="emptycell">
</td>
<td class="emptycell">
<asp:Label ID="lblApprovedDte" runat="server"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltext">
<asp:Label ID="lblDecline" runat="server" CssClass="fieldlabeltextrequired" Text="Decline Reason:"></asp:Label></td>
<td class="emptycell">
</td>
<td colspan="4">
<Telerik:RadTextBox ID="txtDeclineReason" runat="server" BorderColor="#93ADC7" BorderStyle="Solid"
BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter reason"
Font-Names="Arial" Font-Size="11px" MaxLength="29" Skin="Office2007" Rows="2" ClientEvents-OnValueChanged="ResetConfirmVar" Width="100%" >
<EmptyMessageStyle Font-Names="Arial,verdana" />
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox></td>
</tr>
</table>
<br />
<Telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnablePageHeadUpdate="False">
<AjaxSettings>
<%--<radA:AjaxSetting AjaxControlID="btnSaveDraft">
<UpdatedControls>
<radA:AjaxUpdatedControl ControlID="ddlJobNumber" />
<radA:AjaxUpdatedControl ControlID="txtProjectName" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator8" />
<radA:AjaxUpdatedControl ControlID="ddlCostCenterNames" />
<radA:AjaxUpdatedControl ControlID="RFVCostCenterNames" />
<radA:AjaxUpdatedControl ControlID="ddlClientName" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator4" />
<radA:AjaxUpdatedControl ControlID="numBillings" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator1" />
<radA:AjaxUpdatedControl ControlID="numRevenue" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator2" />
<radA:AjaxUpdatedControl ControlID="ddlRateCard" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator7" />
<radA:AjaxUpdatedControl ControlID="dteRateEffectiveDate" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator3" />
<radA:AjaxUpdatedControl ControlID="chkNoBid" />
<radA:AjaxUpdatedControl ControlID="dteExpectedStartDte" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator5" />
<radA:AjaxUpdatedControl ControlID="dteExpectedEndDte" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator6" />
<radA:AjaxUpdatedControl ControlID="txtDescription" />
</UpdatedControls>
</radA:AjaxSetting>--%>
<Telerik:AjaxSetting AjaxControlID="btnRefresh">
<UpdatedControls>
<Telerik:AjaxUpdatedControl ControlID="lblFeesTotal" />
<Telerik:AjaxUpdatedControl ControlID="lblCostsTotal" />
<Telerik:AjaxUpdatedControl ControlID="lblTotalFreelanceFees" />
<Telerik:AjaxUpdatedControl ControlID="lblThirdParty" />
<Telerik:AjaxUpdatedControl ControlID="lblThirdPartyRev" />
<Telerik:AjaxUpdatedControl ControlID="lblExceed" />
<Telerik:AjaxUpdatedControl ControlID="lblCostsExceed" />
</UpdatedControls>
</Telerik:AjaxSetting>
</AjaxSettings>
</Telerik:RadAjaxManager>
<br />
<br />
Fees Grid:
<br />
<Telerik:RadGrid ID="GridFees" runat="server" AutoGenerateColumns="False" DataSourceID="SDSFeeColumns" GridLines="None" AllowAutomaticDeletes="True" AllowAutomaticUpdates="True" AllowAutomaticInserts="True" Skin="Office2007" ValidationSettings-ValidationGroup="GridFees">
<ExportSettings>
<Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
</ExportSettings>
<MasterTableView DataKeyNames="BgetNodeFeesID" DataSourceID="SDSFeeColumns" EditMode="InPlace" CommandItemDisplay="Top" ShowFooter="True">
<CommandItemTemplate>
<asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert">
<img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New
</asp:LinkButton>
</CommandItemTemplate>
<RowIndicatorColumn Visible="False">
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn Resizable="False" Visible="False">
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
UpdateImageUrl="..\Img\GridUpdateIcon.gif"
EditImageUrl="..\Img\GridEditIcon.gif"
CancelImageUrl="..\Img\GridCancelIcon.gif"
InsertImageUrl="..\Img\GridUpdateIcon.gif">
</Telerik:GridEditCommandColumn>
<Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN"
ConfirmText="Delete this row?" ButtonType="ImageButton"
ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete"><HeaderStyle Width="20px" />
</Telerik:GridClientDeleteColumn>
<Telerik:GridBoundColumn DataField="BgetNodeFeesID" DataType="System.Int64" HeaderText="BgetNodeFeesID"
ReadOnly="True" SortExpression="BgetNodeFeesID" UniqueName="BgetNodeFeesID">
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn HeaderText="Include<br/>in Sell" UniqueName="IncludeSell">
<ItemTemplate>
<asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>' />
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="RoleID" HeaderText="Role" DataField="RoleID">
<ItemTemplate>
<asp:Label ID="lblRoleID" runat="server" Text='<%# Eval("RoleName")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="RoleID" runat="server"
DataTextField="code_value_desc" DataValueField="RoleID"
SelectedValue='<%# Bind("RoleID") %>'
DataSourceID="SDSRoles" AppendDataBoundItems="true"
OnSelectedIndexChanged="FeesRoleID_SelectedIndexChanged" ValidationGroup="GridFees">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVRoleID" runat="server" ErrorMessage="*" ControlToValidate="RoleID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SourcesID" HeaderText="Source" DataField="SourcesID">
<ItemTemplate>
<asp:Label ID="lblSourcesID" runat="server" Text='<%# Eval("Sources")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="SourcesID" runat="server"
DataTextField="Sources" DataValueField="SourcesID" SelectedValue='<%# Bind("SourcesID") %>'
DataSourceID="SDSSources" AppendDataBoundItems="true"
OnSelectedIndexChanged="FeesSourcesID_SelectedIndexChanged" ValidationGroup="GridFees">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVSourcesID" runat="server" ErrorMessage="*" ControlToValidate="SourcesID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Resource" HeaderText="Resource" DataField="Resource">
<ItemTemplate>
<asp:Label ID="lblResource" runat="server" Text='<%# Eval("Resource")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radTextBox ID="Resource" runat="server" Text='<%# Bind("Resource")%>' Width="50"
EnabledStyle-HorizontalAlign="Right">
</Telerik:radTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top"/>
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="CostCenterID" HeaderText="Cost Center" DataField="CostCenterID">
<ItemTemplate>
<asp:Label ID="lblCostCenterID" runat="server" Text='<%# Eval("CostCenterName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="CostCenterID" runat="server"
DataTextField="CostCenter" DataValueField="ID" SelectedValue='<%# Bind("CostCenterID") %>'
DataSourceID="SDSCostCenters" AppendDataBoundItems="true" ValidationGroup="GridFees"
OnSelectedIndexChanged="FeesCostCenterID_SelectedIndexChanged">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVCostCenterID" runat="server" ErrorMessage="*" ControlToValidate="CostCenterID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
UniqueName="Description" MaxLength="29">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn UniqueName="Hours" HeaderText="Hours" DataField="Hours">
<ItemTemplate>
<asp:Label ID="lblHours" runat="server" Text='<%# Eval("Hours", "{0:N0}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Hours" runat="server" Text='<%# Bind("Hours")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" OnTextChanged="FeesHours_SelectedIndexChanged">
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
<ItemTemplate>
<asp:Label ID="lblContingency" runat="server" Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="FeesContingency_SelectedIndexChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radNumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="TotalHours" HeaderText="Total Hours" DataField="TotalHours">
<ItemTemplate>
<asp:Label ID="lblTotalHours" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Cost" HeaderText="Cost" DataField="Cost">
<ItemTemplate>
<asp:Label ID="lblCost" runat="server" Text='<%# Eval("Cost","${0:0.00}")%>' ></asp:Label>
<asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Cost" runat="server" Text='<%# Bind("Cost")%>' Width="50"
EnabledStyle-HorizontalAlign="Right">
</Telerik:radnumericTextBox>
<Telerik:radTextBox runat="server" ID="CostStars" Text='<%# Bind("CostStars") %>' Width="50" OnTextChanged="FeesCostStars_TextChanged" AutoPostBack="true">
</Telerik:radTextBox>
<asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SellRate" HeaderText="Sell<br/>Rate" DataField="SellRate">
<ItemTemplate>
<asp:Label ID="lblSellRate" runat="server" Text='<%# Eval("SellRate", "${0:0.00}")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<%-- <radI:radnumericTextBox ID="SellRate" runat="server" Text='<%# Bind("SellRate")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="FeesSellRate_SelectedIndexChanged"></radI:radnumericTextBox>--%>
<asp:Label ID="lblSellRate" runat="server" Text='<%# Bind("SellRate")%>' ></asp:Label>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="SubTotal" DataField="SubTotal">
<ItemTemplate>
<asp:Label ID="lblSubTotal" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj <br/>(MU/MD %)" DataField="Markup">
<ItemTemplate>
<asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="FeesMarkup_SelectedIndexChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total" DataField="Total">
<ItemTemplate>
<asp:Label ID="lblTotal" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<ValidationSettings ValidationGroup="GridFees" />
</Telerik:RadGrid>
<br />
<br />
Costs Grid:<br />
<Telerik:RadGrid ID="GridCosts" runat="server" AutoGenerateColumns="False" DataSourceID="SDSCostColumns" GridLines="None" Skin="Office2007" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" ValidationSettings-ValidationGroup="GridCosts">
<ExportSettings>
<Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
</ExportSettings>
<MasterTableView DataKeyNames="BgetNodeCostID" DataSourceID="SDSCostColumns" CommandItemDisplay="Top" EditMode="InPlace" ShowFooter="True">
<CommandItemTemplate>
<asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert"><img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New</asp:LinkButton>
</CommandItemTemplate>
<RowIndicatorColumn Visible="False">
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn Resizable="False" Visible="False">
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
UpdateImageUrl="..\Img\GridUpdateIcon.gif"
EditImageUrl="..\Img\GridEditIcon.gif"
CancelImageUrl="..\Img\GridCancelIcon.gif"
InsertImageUrl="..\Img\GridUpdateIcon.gif">
</Telerik:GridEditCommandColumn>
<Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN" ConfirmText="Delete this row?"
ButtonType="ImageButton"
ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete">
<HeaderStyle Width="20px" />
</Telerik:GridClientDeleteColumn>
<Telerik:GridBoundColumn DataField="BgetNodeCostID" DataType="System.Int64" HeaderText="BgetNodeCostID"
ReadOnly="True" SortExpression="BgetNodeCostID" UniqueName="BgetNodeCostID">
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn HeaderText="Include<br/>in Sell" UniqueName="IncludeSell">
<ItemTemplate>
<asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>' />
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="ActvID" HeaderText="Activity" DataField="ActvID">
<ItemTemplate>
<asp:Label ID="lblActvID" runat="server" Text='<%# Eval("ActivityName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ActvID" runat="server"
DataTextField="code_value_desc" DataValueField="ActvID" SelectedValue='<%# Bind("ActvID") %>'
DataSourceID="SDSActivities" AppendDataBoundItems="true"
OnSelectedIndexChanged="CostsActivityID_SelectedIndexChanged" ValidationGroup="GridCosts">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVActvID" runat="server" ErrorMessage="*" ControlToValidate="ActvID" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubActvID" HeaderText="SubActivity" DataField="SubActvID">
<ItemTemplate>
<asp:Label ID="lblSubActvID" runat="server" Text='<%# Eval("SubActivityName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="SubActvID" runat="server" DataTextField="SubActvName" DataValueField="SubActvID" ValidationGroup="GridCosts">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVSubActvID" runat="server" ErrorMessage="*" ControlToValidate="SubActvID" InitialValue= "- Select One -" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
UniqueName="Description" MaxLength="29">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridBoundColumn DataField="Resource" HeaderText="Resource" SortExpression="Resource"
UniqueName="Resource">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn UniqueName="Qty" HeaderText="Quantity" DataField="Qty">
<ItemTemplate>
<asp:Label ID="lblQty" runat="server" Text='<%# Eval("Qty", "{0:N0}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Qty" runat="server" Text='<%# Bind("Qty")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="CostsQty_TextChanged"></Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="CostRate" HeaderText="Cost" DataField="CostRate">
<ItemTemplate>
<asp:Label ID="lblCostRate" runat="server" Text='<%# Eval("CostRate", "${0:0.00}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="CostRate" runat="server" Text='<%# Bind("CostRate")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" OnTextChanged="CostsCostRate_TextChanged"></Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
<ItemTemplate>
<asp:Label ID="lblContingency" runat="server" Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="CostsContingency_TextChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radNumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="Sub Total" >
<ItemTemplate>
<asp:Label ID="lblSubTotal" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj <br/>(MU/MD %)" DataField="Markup">
<ItemTemplate>
<asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="CostsMarkup_TextChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total">
<ItemTemplate>
<asp:Label ID="lblTotal" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<ValidationSettings ValidationGroup="GridCosts" />
</Telerik:RadGrid><br />
<br />
<br />
<br />
<asp:SqlDataSource ID="SDSCostColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
DeleteCommand="proc_xBudgetNodeCostsDelete" DeleteCommandType="StoredProcedure"
InsertCommand="proc_xBudgetNodeCostsInsert" InsertCommandType="StoredProcedure"
SelectCommand="proc_xBudgetNodeCostsByBReqID" SelectCommandType="StoredProcedure"
UpdateCommand="proc_xBudgetNodeCostsUpdate" UpdateCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="BgetNodeCostID" Type="Int64" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Direction="InputOutput" Name="BgetNodeCostID" Type="Int64" />
<asp:QueryStringParameter Name="BudgetNodeID" QueryStringField="BNID" Type="Int64" />
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="ActvID" Type="String" />
<%-- <asp:Parameter Name="SubActvID" Type="Int64" /> This is set in the InsertCommand in code behind --%>
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="TypeID" Type="Int64" />
<asp:Parameter Name="Qty" Type="Int64" />
<asp:Parameter Name="CostRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />
</InsertParameters>
<UpdateParameters>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="ActvID" Type="String" />
<%--<asp:Parameter Name="SubActvID" Type="Int64" /> This is set in the UpdateCommand in code behind--%>
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="TypeID" Type="Int64" />
<asp:Parameter Name="Qty" Type="Int64" />
<asp:Parameter Name="CostRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSFeeColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
DeleteCommand="proc_xBudgetNodeFeesDelete" DeleteCommandType="StoredProcedure"
InsertCommand="proc_xBudgetNodeFeesInsertByBudReqID" InsertCommandType="StoredProcedure"
SelectCommand="proc_xBudgetNodeFeesByBReqID" SelectCommandType="StoredProcedure"
UpdateCommand="proc_xBudgetNodeFeesUpdate" UpdateCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="BudgetReqID" QueryStringField="BReqID" Type="Int64" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
<asp:Parameter Name="BudgetNodeID" Type="Int64" />
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="RoleID" Type="String" />
<asp:Parameter Name="SourcesID" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="CostCenterID" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Hours" Type="Int32" />
<asp:Parameter Name="Cost" Type="Decimal" />
<asp:Parameter Name="CostStars" Type="String" />
<asp:Parameter Name="SellRate" Type="Decimal" />
<%--<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />--%>
</UpdateParameters>
<InsertParameters>
<%-- <asp:Parameter Direction="InputOutput" Name="BgetNodeFeesID" Type="Int64" />--%>
<%-- <asp:Parameter Name="BudgetNodeID" Type="Int64" />--%>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="RoleID" Type="String" />
<asp:Parameter Name="SourcesID" Type="Int64" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="CostCenterID" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Hours" Type="Int32" />
<asp:Parameter Name="Cost" Type="Decimal" />
<asp:Parameter Name="CostStars" Type="String" />
<asp:Parameter Name="SellRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSRoles" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xRoleNamesByRateCardID" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
<asp:ControlParameter ControlID="ddlRateCard" Name="RateID" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSSources" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xSourcesLoadAllByCompanyID" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSCostCenters" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xCostCenterProfileByName" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="CompanyID" SessionField="ID" Type="String" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSSubActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xSubActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" Type="Int64" />
<asp:Parameter DefaultValue="1585" Name="ActivityID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sdsCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xCustomerLoadAllActiveOther" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sdsRateCards" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xRateNamesAllOther" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSJobNumbers" runat="server" ConnectionString="<%$ ConnectionStrings:Budget2ConnectionString %>"
SelectCommand="proc_ReturnAvailableJobNumbers" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</div>
</asp:Content>
<%-- </form>
</body>
</html>--%>
ASPX.VB
Imports System.Data
Imports System.Data.SqlClient
Imports Telerik.Web.UI
Imports System.Math
Imports PBDAL.StoredProcedureCallerClasses
Imports Budget.Roles.BudgetRoleProvider
Imports System.Text
Imports RequestProcess
Imports MailUtilities
Imports PBBRL.EntityClass.xProject
Imports PBBRL.EntityClass.xProjectRequest
Partial Class Requests_ProposalRequest
Inherits PBBRL.BasePage.MyBasePage
Dim GridTotalHours As Integer
Dim GridTotalHoursWithCont, GridSubTotal, GridTotal As Double
Dim GridCostsSubTotal, GridCOstsTotal, GridSubTotalWithoutCont, GridCOstsSubTotalNoCont As Double
Dim EditDoc As Boolean = True
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim EditDoc As Boolean = True
Try
ViewState.Add("CompanyID", Request.QueryString("ID").ToString())
Catch
ViewState.Add("CompanyID", "")
End Try
Try
ViewState.Add("BudReqID", Request.QueryString("BReqID").ToString())
Catch
ViewState.Add("BudReqID", "")
End Try
Dim Temp As String = Session("DBName")
If Not IsPostBack Then
''Load Page Headers
''Do this if it is being loaded for the first time
Master.DisplayDataFromPage("Proposal Request")
Master.GetMenuDataSourceFromPage("ProjectRequestsSiteMap")
If ViewState.Item("BudReqID") <> "" Then
'Load the existing values from ProjectRequest
Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
obj.FetchUsingPK(ViewState.Item("BudReqID"))
If obj.RateCardId.ToString <> "" Then
Me.ddlRateCard.SelectedValue = obj.RateCardId
ViewState.Add("RateCardID", obj.RateCardId)
End If
If obj.EffectiveDate.HasValue Then
Me.dteRateEffectiveDate.SelectedDate = obj.EffectiveDate
ViewState.Add("EffectiveDate", obj.EffectiveDate)
End If
If obj.ProjDesc.ToString <> "" Then
Me.txtDescription.Text = obj.ProjDesc
End If
If obj.ApprovalName.ToString <> "" Then
Me.lblApprovedName.Text = obj.ApprovalName
End If
If obj.ApprovalDate.HasValue Then
Me.lblApprovedDte.Text = obj.ApprovalDate.ToString
End If
If obj.Billings.HasValue Then
Me.numBillings.Text = CType(obj.Billings, String)
End If
If obj.Revenue.HasValue Then
Me.numRevenue.Text = CType(obj.Revenue, String)
End If
If obj.ExpectedStartDate.HasValue Then
Me.dteExpectedStartDte.SelectedDate = obj.ExpectedStartDate
End If
If obj.ExpectedEndDate.HasValue Then
Me.dteExpectedEndDte.SelectedDate = obj.ExpectedEndDate
End If
If obj.NoBid.HasValue Then
Me.chkNoBid.Checked = obj.NoBid
End If
If obj.CostCenterId.ToString <> "" Then
Me.ddlCostCenterNames.SelectedValue = obj.CostCenterId
ViewState.Add("CostCenterID", obj.CostCenterId)
End If
If obj.CustId.ToString <> "" Then
Me.ddlClientName.SelectedValue = obj.CustId
End If
If obj.RequestStatus <> "" Then
Me.txtRequestStatus.Text = obj.RequestStatus
End If
If obj.ProjectName <> "" Then
Me.txtProjectName.Text = obj.ProjectName
End If
If obj.JobNumber <> "" Then
'First see if it is still available
Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcJobNumberStillAvailable(Session("DBName"), obj.JobNumber)
If dt.Rows.Count > 0 Then
'There's a matching JobNumber
Me.ddlJobNumber.SelectedValue = obj.JobNumber
Me.lblJobNumber.Visible = False
Else
'Not available any more
Me.lblJobNumber.Text = obj.JobNumber
Me.ddlJobNumber.Visible = False
End If
End If
'See if user can edit it
Dim LockedBy As String = WhoLockedRecord(ViewState.Item("BudReqID"), "BReqID", Nothing, "Open")
'if Request status is declined, no one can edit
If Me.txtRequestStatus.Text = "Declined" Then
SetNoEditAccess()
Else
'Role/Access/Lock check
If FindUserInRequestBudReq(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterView(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInCompanyView(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
'if they can read, Check the Edit Access
If FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterFM(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
'The user has access
If LockedBy = "" Or LockedBy = "Me" Then
'It's not locked
If Me.txtRequestStatus.Text = "Approved" Then
EditDoc = False
Me.lblEditStatus.Text = "You do not have access to modify this page because it has already been Approved"
End If
ElseIf LockedBy <> "" Then
'It is locked
EditDoc = False
Me.lblEditStatus.Text = "This record is currently locked by: " & LockedBy
End If
Else
'USer has no access
EditDoc = False
Me.lblEditStatus.Text = "You do not have access to modify this page"
End If
If EditDoc = False Then
SetNoEditAccess()
End If
Else
'don't open page
'Define the JavaScript function for the specified control.
Dim focusScript As String = "<script language='javascript'>window.alert('You do not have access to view this page. Please contact the producer for assistance.'); window.history.back();</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
End If
End If
'Hide the Columns in the Grid, depending on Company Profile
HideColumns()
'Get values from Cost Center
Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
objCostCenter.FetchUsingPK(ViewState.Item("CostCenterID"))
ViewState.Add("HideCosts", objCostCenter.HideCosts)
If objCostCenter.ProposalPercentage.HasValue Then
ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
Else
ViewState.Add("ExceedPercentage", 0)
Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)
End If
'Calculate Totals
CalculateTotals()
End If
End If
'See if user can edit it
ClientScript.RegisterOnSubmitStatement(Me.GetType(), "OnSubmitScript", "needToConfirm = false;")
End Sub
Sub SetNoEditAccess()
'It's locked or you have no access - Change all fields to read only
' 'Change all fields to read only
Me.GridFees.MasterTableView.GetColumn("EditColumn").Display = False
Me.GridFees.MasterTableView.GetColumn("DeleteColumn").Display = False
Me.GridFees.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
Me.GridCosts.MasterTableView.GetColumn("EditColumn").Display = False
Me.GridCosts.MasterTableView.GetColumn("DeleteColumn").Display = False
Me.GridCosts.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
Me.btnSaveDraft.Visible = False
Me.btnSubmit.Visible = False
Me.btnCalculateRates.Visible = False
Me.btnRefresh.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.txtProjectName.Enabled = False
Me.ddlCostCenterNames.Enabled = False
Me.ddlClientName.Enabled = False
Me.numBillings.Enabled = False
Me.numRevenue.Enabled = False
Me.ddlRateCard.Enabled = False
Me.dteRateEffectiveDate.Enabled = False
Me.chkNoBid.Enabled = False
Me.dteExpectedEndDte.Enabled = False
Me.dteExpectedStartDte.Enabled = False
Me.txtDescription.Enabled = False
Me.ddlJobNumber.Enabled = False
Me.txtDeclineReason.Enabled = False
End Sub
Public Sub HideColumns()
Dim VisibleColumn As String
'FEES GRID
'This will loop through Columns that should be there
'Set up connection
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader = dao.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeFeesAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
Dim VisibleColumnArray As New ArrayList
While reader.Read()
'reading from the datareader
VisibleColumn = reader(0).ToString().ToUpper
VisibleColumnArray.Add(VisibleColumn)
End While
reader.Close()
Dim x As Integer
For x = 0 To Me.GridFees.MasterTableView.Columns.Count - 1
Dim PossibleColumnName As String = Me.GridFees.MasterTableView.Columns(x).UniqueName.ToUpper
If VisibleColumnArray.Contains(PossibleColumnName) Then
'It's OK
ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
'It's OK
Else
Me.GridFees.MasterTableView.Columns(x).Visible = False
End If
Next
''COSTS GRID
''This will loop through Columns that should be there
''Set up connection
Dim dao2 As New PBDAL.DaoClasses.TypedListDAO()
Dim reader2 As IDataReader = dao2.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeCostsAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
Dim VisibleColumnArray2 As New ArrayList
While reader2.Read()
'reading from the datareader
VisibleColumn = reader2(0).ToString().ToUpper
VisibleColumnArray2.Add(VisibleColumn)
End While
reader2.Close()
Dim y As Integer
For y = 0 To Me.GridCosts.MasterTableView.Columns.Count - 1
Dim PossibleColumnName As String = Me.GridCosts.MasterTableView.Columns(y).UniqueName.ToUpper
If VisibleColumnArray2.Contains(PossibleColumnName) Then
'It's OK
ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
'It's OK
Else
Me.GridCosts.MasterTableView.Columns(y).Visible = False
End If
Next
End Sub
'Buttons
Protected Sub btnSaveDraft_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.Click
Dim BudReqID As Integer
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim ProjectNumber As String = Me.ddlJobNumber.SelectedValue
If ProjectNumber = "0" Then
ProjectNumber = Nothing
End If
'Just saves the header information
If Me.txtRequestStatus.Text = "" Then
'It's new, save a new Request
PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, CType(Billings, Integer), CType(Revenue, Integer), PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
Me.txtRequestStatus.Text = "Draft"
ViewState.Add("BudReqID", BudReqID)
AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
Response.Redirect("~/Requests/ProposalRequest.aspx?ID=" + ViewState.Item("CompanyID").ToString + "&BReqID=" + ViewState.Item("BudReqID").ToString)
Else
'It already exists, just update it
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
End If
End Sub
Protected Sub btnSaveDraft_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Then
Me.btnSaveDraft.Visible = True
Else
Me.btnSaveDraft.Visible = False
End If
End Sub
Protected Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
CalculateTotals()
End Sub
Protected Sub btnRefresh_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.PreRender
If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnRefresh.Visible = False
Else
Me.btnRefresh.Visible = True
End If
End Sub
Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
'Get values to get updated
Dim BudReqID As Integer
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim BNFeesID As Integer = 0
Dim BNCostID As Integer = 0
Dim feesMarkup As Integer = 0
Dim feesCont As Integer = 0
Dim costsMarkup As Integer = 0
Dim costsCont As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim Body As String = ""
Dim RevRecogID As Integer
Dim CreatedBy As String
Dim CreatedDte As String
'Get ProjectNumber
ProjectNumber = Me.ddlJobNumber.SelectedItem.Value
If ProjectNumber <> "0" Then
ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
Else
ProjectNumber = Nothing
End If
'validate required fields
Validate()
'first save updates to tables if there is one already or create one
If ViewState.Item("BudReqID").ToString = "" Then
PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, ReqStatus, RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
ViewState.Add("BudReqID", CType(BudReqID, String))
'Add User to access table
AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
Else
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
End If
'If Nobid then no approval needed - create budget structure
'else send for approval and update status
If NoBid Then
'Update request status, create Project profile, create standard budget structure, and put request in as proposal
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)
'Get Creator of request
Dim obj1 As New PBDAL.EntityClasses.XProjectRequestEntity
obj1.FetchUsingPK(ViewState.Item("BudReqID"))
CreatedBy = obj1.CreatedBy
CreatedDte = obj1.CreatedDate
'Get Cost Center defaults for Project Profile
Dim obj As New PBDAL.EntityClasses.XCostCenterProfileEntity
obj.FetchUsingPK(ViewState.Item("CostCenterID"))
feesMarkup = obj.FeeMarkUp
feesCont = obj.FeeContingency
costsMarkup = obj.CostMarkUp
costsCont = obj.CostContingency
RevRecogId = obj.RevRecogId
'Create Project Profile
PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, RevRecogID, NewPID)
'Give access to project profile
AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")
'Creates Default Budget Structure and creates new budget
PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)
'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))
'Get the New BudgetNodeID
PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)
'Give access to proposal
AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")
'Get BudgetNodeFeesID and update with BudgetNode ID
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNFeesID = reader.GetValue(3)
If BNFeesID <> 0 Then
PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
'Get BudgetNodeCostsID and update with BudgetNodeID
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNCostID = reader.GetValue(4)
If BNCostID <> 0 Then
PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
reader.Close()
'Update request status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)
Me.txtRequestStatus.Text = "No Approval Needed"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
'Send user to Project Home Page
Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
Else
SendTo = GetEmailByRole("ProposalRequestApprover", ViewState.Item("CostCenterID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There is no proposal request approver for this cost center. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
SubmitForApprovalBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), ViewState.Item("CompanyID"), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for " & Me.txtProjectName.Text & " needs your approval", Body)
'Update status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Submitted for Approval", Nothing)
Me.txtRequestStatus.Text = "Sumbmitted for Approval"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
Response.Redirect("~")
End If
End If
End Sub
Protected Sub btnSubmit_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.PreRender
If Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnSubmit.Visible = True
Else
Me.btnSubmit.Visible = False
End If
End Sub
Protected Sub btnCalculateRates_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.Click
'They've chosen a new Rate Card and/or Effective Date - change the Rates for all line items for all nodes for all Budgets for this Project
'Assign values
Dim RateTypeCD As String
Dim RateCardID As String = Me.ddlRateCard.SelectedValue
Dim EffectiveDate As Date = Me.dteRateEffectiveDate.SelectedDate
Dim PROJ As String = Me.ddlJobNumber.Text
Dim OFFC As String = Me.ddlCostCenterNames.SelectedValue
Dim CUST As String = Me.ddlClientName.SelectedValue
'Get line items
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim temp As String = Session("DBName")
Dim reader As IDataReader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
'Get RoleID and EmployeeID from Line Item
Dim FeesID As String = reader.GetValue(3)
Dim LABC As String = reader.GetValue(0)
Dim EMP As String
Try
EMP = reader.GetValue(8)
Catch ex As Exception
EMP = ""
End Try
'If reader.GetValue(8) = Null Then
' EMP = ""
'Else
' EMP = reader.GetValue(8)
'End If
'First get Sell Rate
RateTypeCD = "BR"
Dim SellRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
'Then get Cost Rate
RateTypeCD = "CR"
Dim CostRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
'Update the Sell and Cost rate for that Line Item
PBBRL.EntityClass.xBudgetNodeFees.UpdateSellAndCostRate(FeesID, SellRate, CostRate)
Loop
Me.GridFees.Rebind()
' Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXBudgetNodeFeesByBreqId(ViewState.Item("BudReqID"), ViewState.Item("DBName"))
End Sub
Protected Sub btnCalculateRates_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.PreRender
If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnCalculateRates.Visible = False
Else
Me.btnCalculateRates.Visible = True
End If
End Sub
Protected Sub btnApprove_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.Click
'Get values to get updated in case DOP made changes
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim rateCardID As String = Me.ddlRateCard.SelectedValue
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim Bid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim feesMarkup As Integer = 0
Dim feesCont As Integer = 0
Dim costsMarkup As Integer = 0
Dim costsCont As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim CreatedBy As String
Dim CreatedDte As String
Dim Body As String = ""
Dim BNFeesID As Integer = 0
Dim BNCostID As Integer = 0
Dim revRecogID As Integer
'Get Creator of request
Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
obj.FetchUsingPK(ViewState.Item("BudReqID"))
CreatedBy = obj.CreatedBy
CreatedDte = obj.CreatedDate
'Get ProjectNumber
If Me.ddlJobNumber.SelectedItem.Text <> "" Then
ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
End If
'validate required fields
Validate()
SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Update Project Request in case changes where made
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
'Get Cost Center defaults for Project Profile
Dim objCC As New PBDAL.EntityClasses.XCostCenterProfileEntity
objCC.FetchUsingPK(ViewState.Item("CostCenterID"))
feesMarkup = objCC.FeeMarkUp
feesCont = objCC.FeeContingency
costsMarkup = objCC.CostMarkUp
costsCont = objCC.CostContingency
revRecogID = objCC.RevRecogId
'Create Project Profile
PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, revRecogID, NewPID)
'Give access to project profile
AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")
AddUserToRole(CreatedBy, NewPID, "ProjectAccess", "EditAccess")
'Creates Default Budget Structure and creates new budget
PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)
'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))
'Get the New BudgetNodeID
PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)
'Give access to proposal
AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")
AddUserToRole(CreatedBy, BudgetNodeID, "ProposalAccess", "EditAccess")
'Get BudgetNodeFeesID and update with BudgetNode ID
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNFeesID = reader.GetValue(3)
If BNFeesID <> 0 Then
PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
'Get BudgetNodeCostsID and update with BudgetNodeID
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNCostID = reader.GetValue(4)
If BNCostID <> 0 Then
PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
reader.Close()
'Update request status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Approved", Nothing)
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
ApprovedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), CType(NewPID, String), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Approved", Body)
Me.txtRequestStatus.Text = "Approved"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
'Send user to Project Home Page
Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
End If
End Sub
Protected Sub btnApprove_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.PreRender
If Me.txtRequestStatus.Text = "Submitted for Approval" Then
Me.btnApprove.Visible = True
Else
Me.btnApprove.Visible = False
End If
End Sub
Protected Sub btnDeclined_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.Click
'Get values to get updated in case DOP made changes
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim rateCardID As String = Me.ddlRateCard.SelectedValue
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim Bid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim Body As String = ""
'validate required fields
Validate()
If Me.txtDeclineReason.Text = "" Then
Me.lblErrorMessage.Controls.Add(New LiteralControl("Enter declined reason" + "<br/>"))
Else
SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
DeclinedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), Session("ID"), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Declined", Body)
'Update status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Declined", Me.txtDeclineReason.Text)
Me.txtRequestStatus.Text = "Declined"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
End If
'Send user to Project Home Page
Response.Redirect("../Default.aspx")
End If
End Sub
Protected Sub btnDeclined_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.PreRender
If Me.txtRequestStatus.Text = "Submitted for Approval" Then
Me.btnDeclined.Visible = True
Else
Me.btnDeclined.Visible = False
End If
End Sub
Protected Sub GridFees_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridFees.ItemCommand
If (e.CommandName = RadGrid.InitInsertCommandName) Then
'This will set teh default value of the IncludeSell Check box
e.Canceled = True
'Prepare an IDictionary with the predefined values
Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
'set initial checked state for the checkbox on init insert
newValues("IncludeSell") = True
'Insert the item and rebind
e.Item.OwnerTableView.InsertItem(newValues)
End If
End Sub
Protected Sub GridFees_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridFees.ItemDataBound
If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
'This happens when a row goes into Insert mode
Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'MarkupText.Text = ViewState.Item("FeeMarkup")
'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'ContingencyText.Text = ViewState.Item("FeeContingency")
GridItem.FindControl("Cost").Visible = True
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = False
ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
'Called everytime the Grid is built/Insert/Update
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
Dim Hours As Double
'Dim Contingency As Double
Dim SellRate As Double
'Dim Markup As Double
'Dim SourcesID As String
'Get values for row
Dim HoursField As Label = CType(GridItem("Hours").FindControl("lblHours"), Label)
If HoursField.Text = "" Then
Hours = 0
Else
Hours = HoursField.Text
End If
Dim ContingencyField As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
'If ContingencyField.Text = "" Then
' Contingency = 0
'Else
' Contingency = Left(ContingencyField.Text, ContingencyField.Text.Length - 2)
'End If
Dim SellRateField As Label = CType(GridItem("SellRate").FindControl("lblSellRate"), Label)
If SellRateField.Text = "" Then
SellRate = 0
Else
SellRate = SellRateField.Text
End If
'Dim MarkupField As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
'If MarkupField.Text = "" Then
' Markup = 0
'Else
' Markup = Left(MarkupField.Text, MarkupField.Text.Length - 2)
'End If
Dim SourcesField As Label = CType(GridItem("SourcesID").FindControl("lblSourcesID"), Label)
If SourcesField.Text = "Freelance" Then
'It's a Freelancer
'Does CostStars = **** or Numbers
Dim CostStars As Label = CType(GridItem("Cost").FindControl("lblCostStars"), Label)
If CostStars.Text = "****" Then
'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
ElseIf CostStars.Text = "" Then
'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
ElseIf ViewState.Item("HideCosts") = True Then
'It's Internal, but Profile says Hide Costs
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'It's Internal - Profile says Show Costs
GridItem.FindControl("lblCost").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
'Recalculate Totals for Row
'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
'Dim SubTotal As Double = TotalHours * SellRate
'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
'Dim SubTotalWithoutCont As Double = Hours * SellRate
Dim Total As Double = Round(Hours * SellRate, 0)
'Assign values for Row
'Dim TotalHoursField As Label = CType(GridItem("TotalHours").FindControl("lblTotalHours"), Label)
'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
'Dim SubTotalField As Label = CType(GridItem("SubTotal").FindControl("lblSubTotal"), Label)
'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
Dim TotalField As Label = CType(GridItem("Total").FindControl("lblTotal"), Label)
TotalField.Text = String.Format("{0:C0}", Total)
'Find values for grid
GridTotalHours = Round(GridTotalHours + Hours, 0)
'GridTotalHoursWithCont = GridTotalHoursWithCont + TotalHours
'GridSubTotal = GridSubTotal + SubTotal
GridTotal = Round(GridTotal + Total, 0)
'GridSubTotalWithoutCont = GridSubTotalWithoutCont + SubTotalWithoutCont
ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
'This happens when a Row goes into Edit mode
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
Dim SourcesField As DropDownList = CType(GridItem("SourcesID").FindControl("SourcesID"), DropDownList)
Dim SourcesID As String = SourcesField.SelectedValue
'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
HideCostsTextBoxes(SourcesID, GridItem)
Dim HoursField As RadNumericTextBox = CType(GridItem("Hours").FindControl("Hours"), RadNumericTextBox)
CalculateRowTotalsFees(HoursField)
ElseIf (TypeOf e.Item Is GridFooterItem) Then
'Populates Footer Totals
Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
footerItem("Hours").Text = String.Format("{0:N0}", Round(GridTotalHours, 0))
footerItem("Hours").HorizontalAlign = HorizontalAlign.Right
'footerItem("TotalHours").Text = String.Format("{0:N0}", Round(GridTotalHoursWithCont, 0))
'footerItem("TotalHours").HorizontalAlign = HorizontalAlign.Right
'footerItem("SubTotal").Text = String.Format("{0:C0}", GridSubTotal)
'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
footerItem("SellRate").Controls.Add(New LiteralControl("Total: <br/>"))
'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
footerItem("SellRate").HorizontalAlign = HorizontalAlign.Right
footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridTotal) & " <br/>"))
'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridSubTotal - GridSubTotalWithoutCont)))
footerItem("Total").HorizontalAlign = HorizontalAlign.Right
End If
End Sub
Protected Sub FeesRoleID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
'Recalculate Rates
RecalculateRates(sender)
End Sub
Protected Sub FeesCostCenterID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
'Recalculate Rates
RecalculateRates(sender)
End Sub
Protected Sub FeesSourcesID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim Source As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(Source.NamingContainer, GridDataItem)
Dim SourcesID As String = Source.SelectedValue
'Recalculate Rates
RecalculateRates(sender)
'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
HideCostsTextBoxes(SourcesID, gridItem)
End Sub
Protected Sub FeesHours_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesContingency_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesMarkup_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesCostStars_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
'If the user changed the STars to a number, move that number into Cost so that it gets saved to the table
Dim CostStarsField As RadTextBox = CType(sender, RadTextBox)
Dim gridItem As GridDataItem = CType(CostStarsField.NamingContainer, GridDataItem)
Dim CostStars As String = CostStarsField.Text
Dim CostField As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
CostField.Text = CostStars
End Sub
Protected Sub CalculateRowTotalsFees(ByVal sender As Object)
Dim Hours As String
'Dim Contingency As String
Dim SellRate As String
'Dim Markup As String
Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
'Get values for row
Dim HoursField As RadNumericTextBox = CType(gridItem("Hours").FindControl("Hours"), RadNumericTextBox)
If HoursField.Text = "" Then
Hours = 0
Else
Hours = HoursField.Text
End If
'Dim ContingencyField As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'If ContingencyField.Text = "" Then
' Contingency = 0
'Else
' Contingency = ContingencyField.Text
'End If
Dim SellRateField As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
If SellRateField.Text = "" Then
SellRate = 0
Else
SellRate = SellRateField.Text
End If
'Dim MarkupField As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'If MarkupField.Text = "" Then
' Markup = 0
'Else
' Markup = MarkupField.Text
'End If
'Recalculate Totals for Row
'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
'Dim SubTotal As Double = TotalHours * SellRate
'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
Dim Total As Double = round(Hours * SellRate, 0)
'Assign values for Row
'Dim TotalHoursField As Label = CType(gridItem("TotalHours").FindControl("lblTotalHours"), Label)
'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
'Dim SubTotalField As Label = CType(gridItem("SubTotal").FindControl("lblSubTotal"), Label)
'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
Dim TotalField As Label = CType(gridItem("Total").FindControl("lblTotal"), Label)
TotalField.Text = String.Format("{0:C0}", Total)
End Sub
Protected Sub CalculateTotals()
If ViewState.Item("BudReqID") <> "" Then
'Only do this is there's a BudReqID
Dim dt0 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestDoesDataExist(ViewState.Item("BudReqID"))
If dt0.Rows.Count > 0 Then
Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFees(ViewState.Item("BudReqID"))
Dim TotalFees As Integer = dt.Rows(0).Item(0)
Me.lblFeesTotal.Text = String.Format("{0:C0}", Round(TotalFees, 0))
Dim dt2 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalCosts(ViewState.Item("BudReqID"))
Dim TotalCosts As Integer = dt2.Rows(0).Item(0)
Me.lblCostsTotal.Text = String.Format("{0:C0}", Round(TotalCosts, 0))
Dim dt3 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFreelance(ViewState.Item("BudReqID"))
Dim TotalFreelance As Integer = dt3.Rows(0).Item(0)
Me.lblTotalFreelanceFees.Text = String.Format("{0:C0}", Round(TotalFreelance, 0))
Dim dt4 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnThirdPartyCosts(ViewState.Item("BudReqID"))
Dim TotalThirdParty As Integer = dt4.Rows(0).Item(0)
Me.lblThirdParty.Text = String.Format("{0:C0}", Round(TotalThirdParty, 0))
Me.lblThirdPartyRev.Text = String.Format("{0:P0}", TotalThirdParty / Me.numRevenue.Text)
Me.lblCostsExceed.Text = String.Format("{0:C0}", Round(ViewState.Item("ExceedPercentage") * TotalThirdParty, 0))
End If
End If
End Sub
Protected Sub RecalculateRates(ByVal sender As Object)
'This will recalculate the Rates when various fields change
Dim AnyField As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
Dim SourcesIDField As DropDownList = CType(gridItem("SourcesID").FindControl("SourcesID"), DropDownList)
Dim SourcesID As String = SourcesIDField.SelectedValue
Dim RoleIDField As DropDownList = CType(gridItem("RoleID").FindControl("RoleID"), DropDownList)
Dim RoleID As String = RoleIDField.SelectedValue
Dim ResourceIDField As RadTextBox = CType(gridItem("Resource").FindControl("Resource"), RadTextBox)
Dim ResourceID As String = ResourceIDField.Text
Dim CCIDField As DropDownList = CType(gridItem("CostCenterID").FindControl("CostCenterID"), DropDownList)
Dim CCID As String = CCIDField.SelectedValue
Dim CostCCID As String = ""
Dim SellCCID As String = ""
If CCID <> "" Then
'If there's a CCID, need to find the real CCID to pass to Solomon table, to calculate Cost
Dim Costobj As New PBBRL.EntityClass.xCostCenterProfiles
Costobj.FetchUsingPK(CCID)
CostCCID = Costobj.CostCenterId
End If
'Need to find the real CCID to pass to Solomon table, to calculate Sell Rate
Dim obj As New PBBRL.EntityClass.xCostCenterProfiles
obj.FetchUsingPK(ViewState.Item("CostCenterID"))
SellCCID = obj.CostCenterId
'Recalculate Rates
If SourcesID = "1" Then
'It's Internal
Dim FeeRate As Double
Dim CostRate As Double
FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
'CostRate = CType(CalculateRates(ViewState.Item("RateCardID"), "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
'Costs will now be calculated from one Rate Card for all Projects
CostRate = CType(CalculateRates("STD", "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", CostCCID, ""), Double)
Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
SellRate.Text = FeeRate
Dim Cost As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
Cost.Text = CostRate
Else
'It's Freelance, only recalculate the Sell
Dim FeeRate As Double
FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
SellRate.Text = FeeRate
End If
End Sub
Protected Sub HideCostsTextBoxes(ByVal SourcesID As String, ByVal GridItem As GridDataItem)
If SourcesID = "4" Then
'It's a Freelancer
'Does CostStars = **** or Numbers
Dim CostStars As RadTextBox = CType(GridItem("Cost").FindControl("CostStars"), RadTextBox)
If CostStars.Text = "****" Then
'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
ElseIf CostStars.Text = "" Then
'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
CType(GridItem.FindControl("CostStars"), RadTextBox).Text = "****"
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
Else
'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
ElseIf ViewState.Item("HideCosts") = True Then
'It's Internal, but Profile says Hide Costs
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'It's Internal - Profile says Show Costs
GridItem.FindControl("Cost").Visible = True
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = False
End If
End Sub
Protected Sub GridCosts_InsertCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.InsertCommand
If TypeOf e.Item Is GridEditableItem Then
'This adds the value of the SubActivity to the SDS
Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
Dim SubActivityID As String = SubActivityDDL.SelectedValue
SDSCostColumns.InsertParameters.Add("SubActvID", TypeCode.String, "")
SDSCostColumns.InsertParameters("SubActvID").DefaultValue = SubActivityID
End If
End Sub
Protected Sub GridCosts_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.ItemCommand
If (e.CommandName = RadGrid.InitInsertCommandName) Then
'This will set teh default value of the IncludeSell Check box
e.Canceled = True
'Prepare an IDictionary with the predefined values
Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
'set initial checked state for the checkbox on init insert
newValues("IncludeSell") = True
'Insert the item and rebind
e.Item.OwnerTableView.InsertItem(newValues)
End If
End Sub
Protected Sub GridCosts_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridCosts.ItemDataBound
If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
'This happens when a row goes into Insert mode
'Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'MarkupText.Text = ViewState.Item("CostMarkup")
'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'ContingencyText.Text = ViewState.Item("CostContingency")
ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
'This happens everytime a row is bound (refresh, etc)
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
'Get values for the row
Dim Qty As Integer
Dim CostRate As Double
'Dim Contingency, Markup As Double
'Dim SubTotalNoCont, SubTotal
Dim Total As Integer
Dim QtyField As Label = CType(GridItem("Qty").FindControl("lblQty"), Label)
If QtyField.Text = "" Then
Qty = 0
Else
Qty = QtyField.Text
End If
Dim CostRateText As Label = CType(GridItem("CostRate").FindControl("lblCostRate"), Label)
If CostRateText.Text = "" Then
CostRate = 0
Else
CostRate = CostRateText.Text
End If
'Dim ContingencyText As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
'If ContingencyText.Text = "" Then
' Contingency = 0
'Else
' Contingency = Left(ContingencyText.Text, ContingencyText.Text.Length - 2)
'End If
'Dim MarkupText As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
'If MarkupText.Text = "" Then
' Markup = 0
'Else
' Markup = Left(MarkupText.Text, MarkupText.Text.Length - 2)
'End If
'Find values for this row
'SubTotalNoCont = Qty * CostRate
'SubTotal = SubTotalNoCont + (SubTotalNoCont * (Contingency / 100))
Total = Round(CostRate * Qty, 0)
'Find values for grid
'GridCostsSubTotal = GridCostsSubTotal + SubTotal
GridCOstsTotal = GridCOstsTotal + Total
'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont
'Populate row totals
CType(GridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
'This happens when a Row goes into Edit mode
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
'Populate the SubActivity choices
Dim ActivityField As DropDownList = CType(GridItem("ActvID").FindControl("ActvID"), DropDownList)
Dim ActivityID As String = ActivityField.SelectedValue
Dim ActivityName As String = ActivityField.SelectedItem.Text
If ActivityID = "" Then
Else
'Get SubActivity DataSource
Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
Dim SubActivityDDL As DropDownList = GridItem.FindControl("SubActvID")
If resultSet.Rows.Count = 0 Then
'There are NO SubActivities for this Activity
'Add the Activity as the SubActivity
NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
Else
'There are SubActivities for this Activity
'Update SubActivity List
SubActivityDDL.Items.Clear()
SubActivityDDL.AppendDataBoundItems = True
SubActivityDDL.Items.Add("- Select One -")
SubActivityDDL.DataTextField = "SubActvName"
SubActivityDDL.DataValueField = "SubActvID"
SubActivityDDL.DataSource = resultSet
End If
'Populate SubActivity
Dim BudgetNodeCostsID As Integer = GridItem.GetDataKeyValue("BgetNodeCostID")
Dim obj As New PBBRL.EntityClass.xBudgetNodeCosts
obj.FetchUsingPK(BudgetNodeCostsID)
If obj.SubActvId.HasValue Then
Dim SubActivity As Integer = obj.SubActvId
SubActivityDDL.SelectedValue = SubActivity
End If
SubActivityDDL.DataBind()
End If
'Calculate new Totals
Dim QtyField As RadNumericTextBox = CType(GridItem("Qty").FindControl("Qty"), RadNumericTextBox)
CalculateRowTotalsCosts(QtyField)
ElseIf (TypeOf e.Item Is GridFooterItem) Then
Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
'footerItem("SubTotal").Text = String.Format("{0:C0}", GridCostsSubTotal)
'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
footerItem("CostRate").Controls.Add(New LiteralControl("Total: <br/>"))
'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
footerItem("CostRate").HorizontalAlign = HorizontalAlign.Right
footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCOstsTotal) & " <br/>"))
'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCostsSubTotal - GridCOstsSubTotalNoCont)))
footerItem("Total").HorizontalAlign = HorizontalAlign.Right
End If
End Sub
Protected Sub GridCosts_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.UpdateCommand
If TypeOf e.Item Is GridEditableItem Then
'This adds the value of the SubActivity to the SDS
Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
Dim SubActivityID As String = SubActivityDDL.SelectedValue
SDSCostColumns.UpdateParameters.Add("SubActvID", TypeCode.String, "")
SDSCostColumns.UpdateParameters("SubActvID").DefaultValue = SubActivityID
End If
End Sub
Protected Sub CostsQty_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsCostRate_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsContingency_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsMarkup_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CalculateRowTotalsCosts(ByVal sender As Object)
'Get values for the row
Dim QtyValue As Integer
Dim CostRateValue As Double
'Dim ContingencyValue, MarkupValue As Double
'Dim SubTotalNoCont, SubTotal As Integer
Dim Total As Integer
Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
Dim Qty As RadNumericTextBox = CType(gridItem("Qty").FindControl("Qty"), RadNumericTextBox)
If Qty.Text <> Nothing Then
QtyValue = Integer.Parse(Qty.Text)
End If
Dim CostRateText As RadNumericTextBox = CType(gridItem("CostRate").FindControl("CostRate"), RadNumericTextBox)
If CostRateText.Text <> Nothing Then
CostRateValue = Double.Parse(CostRateText.Text)
End If
'Dim ContingencyText As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'If ContingencyText.Text <> Nothing Then
' ContingencyValue = Double.Parse(ContingencyText.Text)
'End If
'Dim MarkupText As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'If MarkupText.Text <> Nothing Then
' MarkupValue = Double.Parse(MarkupText.Text)
'End If
'Find values for this row
'SubTotalNoCont = QtyValue * CostRateValue
'SubTotal = SubTotalNoCont + (SubTotalNoCont * (ContingencyValue / 100))
'Total = SubTotal + (SubTotal * (MarkupValue / 100))
Total = round(QtyValue * CostRateValue,0)
'Find values for grid
'GridCostsSubTotal = GridCostsSubTotal + SubTotal
GridCOstsTotal = GridCOstsTotal + Total
'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont
'Populate row totals
CType(gridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
End Sub
Protected Sub ddlCostCenterNames_SelectedIndexChanged(ByVal o As Object, ByVal e As Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs) Handles ddlCostCenterNames.SelectedIndexChanged
'When the CC is changed, check to see if this Cost Center hides the COsts int he Grid
'Get values from Cost Center
Dim CostCenterID As String = Me.ddlCostCenterNames.SelectedValue
Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
objCostCenter.FetchUsingPK(CostCenterID)
ViewState.Add("CostCenterID", CostCenterID)
ViewState.Add("HideCosts", objCostCenter.HideCosts)
If objCostCenter.ProposalPercentage.HasValue Then
ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
Else
ViewState.Add("ExceedPercentage", 0)
Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)
End If
'Calculate Totals
CalculateTotals()
'Rebind Grid
Me.GridFees.Rebind()
End Sub
Protected Sub CostsActivityID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim source As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(source.NamingContainer, GridDataItem)
'Get Variables
Dim ActivityID As String = source.SelectedValue
Dim ActivityName As String = source.SelectedItem.Text
'Get SubActivity DataSource
Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
Dim SubActivityDDL As DropDownList = gridItem.FindControl("SubActvID")
If resultSet.Rows.Count = 0 Then
'There are NO SubActivities for this Activity
NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
Else
'There are SubActivities for this Activity
'Update SubActivity List
SubActivityDDL.Items.Clear()
SubActivityDDL.AppendDataBoundItems = True
SubActivityDDL.Items.Add("- Select One -")
SubActivityDDL.DataTextField = "SubActvName"
SubActivityDDL.DataValueField = "SubActvID"
SubActivityDDL.DataSource = resultSet
SubActivityDDL.DataBind()
End If
End Sub
Protected Sub lblDecline_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblDecline.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
Me.lblDecline.Visible = False
Else
Me.lblDecline.Visible = True
End If
End Sub
Protected Sub txtDeclineReason_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDeclineReason.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
Me.txtDeclineReason.Visible = False
Else
Me.txtDeclineReason.Visible = True
End If
End Sub
End Class
The RadScriptLibrary is being loaded from the MasterPage.master
Here is an example of the aspx and aspx.vb pages
ASPX:
<%--<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" %>
--%>
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="ProposalRequest.aspx.vb" Inherits="Requests_ProposalRequest" title="Request" %>
<%@ MasterType VirtualPath="~/MasterPage.master" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Project Request</title>
</head>
<body>
<form id="form1" runat="server">--%>
<asp:Content ID="Content1" Runat="Server" ContentPlaceHolderID="ContentPlaceHolder1">
<script type="text/javascript">
var needToConfirm = false;
window.onbeforeunload = confirmExit;
function confirmExit()
{
if (needToConfirm)
{
return "Changes will be lost if you don’t click on the ‘Save’-button";
}
}
function DatePicker_OnDateSelected(pickerInstance, args)
{
needToConfirm = true;
}
function ResetConfirmVar()
{
needToConfirm = true;
}
</script>
<asp:Label ID="lblEditStatus" runat="server" CssClass="editstatus"></asp:Label><br />
<div>
<asp:Button ID="btnSaveDraft" runat="server" CssClass="mybutton" Text="Save Draft" ValidationGroup="Top" />
<asp:Button ID="btnSubmit" runat="server" CssClass="mybutton" Text="Submit" />
<asp:Button ID="btnCalculateRates" runat="server" CssClass="mybutton" Text="Recalculate Rates" />
<asp:Button ID="btnApprove" runat="server" CssClass="mybutton" Text="Approve" />
<asp:Button ID="btnDeclined" runat="server" CssClass="mybutton" Text="Decline" />
<br />
<asp:Label ID="lblErrorMessage" runat="server" CssClass="errormessage" Text=""></asp:Label><br />
<table border="0" cellpadding="0" cellspacing="3">
<tr>
<td class="fieldlabeltext">
Request Status:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="txtRequestStatus" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
<td class="fieldlabeltext">
Project Number:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlJobNumber" runat="server" skin="Office2007"
DataSourceID="SDSJobNumbers"
Width="150px" Height="100px"
DataTextField="Project" DataValueField="Project" MarkFirstMatch="True"
AppendDataBoundItems="true">
<Items>
<Telerik:RadComboBoxItem Text="-Select One-" Value="0" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<asp:Label ID="lblJobNumber" runat="server" Text=""></asp:Label>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Project Name:</td>
<td class="emptycell">
</td>
<td>
<Telerik:RadTextBox ID="txtProjectName" runat="server" CssClass="fielddatatext" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" MaxLength="29" >
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator8" runat="server" ControlToValidate="txtProjectName"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Cost Center:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlCostCenterNames" runat="server"
datasourceid="SDSCostCenters" datatextfield="CostCenter" AppendDataBoundItems="true"
datavaluefield="ID" skin="Office2007" ValidationGroup="Top" >
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<%--<asp:DropDownList ID="ddlCostCenterNames" runat="server" DataSourceID="SDSCostCenters"
DataTextField="CostCenter" DataValueField="ID" AppendDataBoundItems="true" ValidationGroup="Top" AutoPostBack="true">
<asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
</asp:DropDownList>--%>
<asp:RequiredFieldValidator ID="RFVCostCenterNames" runat="server" ControlToValidate="ddlCostCenterNames"
ErrorMessage="*" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
Total Fees:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblFeesTotal" runat="server" CssClass="fieldlabeldata"></asp:Label>
<asp:LinkButton ID="btnRefresh" runat="server" CausesValidation="False" CssClass="selectbuttons">Refresh</asp:LinkButton>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 39px">
Client Name:</td>
<td class="emptycell" style="height: 39px">
</td>
<td>
<Telerik:radcombobox id="ddlClientName" runat="server" datasourceid="sdsCustomer" Width="200px" Height="100px"
datatextfield="Name" datavaluefield="CustId"
skin="Office2007"
tooltip="select client name" AppendDataBoundItems="true"
AllowCustomText="False" MarkFirstMatch="True" ValidationGroup="Top">
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
</Telerik:radcombobox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="ddlClientName"
ErrorMessage="*" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext" style="height: 39px">
Total Costs:</td>
<td class="emptycell" style="height: 39px">
</td>
<td>
<asp:Label ID="lblCostsTotal" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Projected Billings:</td>
<td class="emptycell">
</td>
<td>
<Telerik:RadNumericTextBox ID="numBillings" runat="server" Culture="English (United States)"
EmptyMessage="Enter billings"
MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext" ToolTip="Enter projected billings"
Type="Currency" ValidationGroup="Top" ClientEvents-OnValueChanged="ResetConfirmVar" >
<NumberFormat DecimalDigits="0" />
</Telerik:RadNumericTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="numBillings"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
Total Freelance Costs:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblTotalFreelanceFees" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 25px">
Projected Revenue:</td>
<td class="emptycell" style="height: 25px">
</td>
<td>
<Telerik:RadNumericTextBox ID="numRevenue" runat="server" Culture="English (United States)"
EmptyMessage="Enter revenue" Font-Names="Arial" Font-Size="11px" LabelCssClass="radLabelCss_JMW"
MaxLength="25" MaxValue="70368744177664" MinValue="-70368744177664" CssClass="fielddatatext"
ToolTip="Enter projected revenue" Type="Currency" ClientEvents-OnValueChanged="ResetConfirmVar" >
<NumberFormat DecimalDigits="0" />
</Telerik:RadNumericTextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="numRevenue"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext" style="height: 25px">
Total 3rd Party Cost:</td>
<td class="emptycell" style="height: 25px">
</td>
<td>
<asp:Label ID="lblThirdParty" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Rate Card:</td>
<td class="emptycell">
</td>
<td>
<Telerik:radcombobox id="ddlRateCard" runat="server" datasourceid="sdsRateCards" ValidationGroup="Top"
datatextfield="code_value_desc" datavaluefield="rate_table_id"
skin="Office2007" AppendDataBoundItems="true">
<Items><Telerik:RadComboBoxItem Text="- Select One -" /></Items>
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
</Telerik:radcombobox>
<%-- <asp:DropDownList ID="ddlRateCard" runat="server" DataSourceID="sdsRateCards"
DataTextField="code_value_desc" DataValueField="rate_table_id" AppendDataBoundItems="true" ValidationGroup="Top">
<asp:ListItem Text="- Select One -" Value="0"></asp:ListItem>
</asp:DropDownList>--%>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="ddlRateCard"
ErrorMessage="*" Height="1px" Width="1px" InitialValue="- Select One -" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
% of 3rd Party Costs to Revenue:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblThirdPartyRev" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired" style="height: 28px">
Rate Effective Date:</td>
<td class="emptycell" style="height: 28px">
</td>
<td>
<Telerik:raddatepicker id="dteRateEffectiveDate" runat="server" culture="English (United States)"
font-names="Arial" font-size="11px" mindate="" Skin="Office2007" >
<DATEINPUT Skin="Office2007" ValidationGroup="Top" />
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="dteRateEffectiveDate"
ErrorMessage="*" ValidationGroup="Top" ></asp:RequiredFieldValidator>
<br />
<br />
</td>
<td class="fieldlabeltext">
% not to Exceed</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltext">
This is a No Bid</td>
<td class="emptycell">
</td>
<td>
<asp:CheckBox ID="chkNoBid" runat="server" CssClass="fieldlabeldata" /></td>
<td class="fieldlabeltext">
Costs not to Exceed:</td>
<td class="emptycell">
</td>
<td>
<asp:Label ID="lblCostsExceed" runat="server" CssClass="fieldlabeldata"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Expected Start Date:</td>
<td class="emptycell">
</td>
<td>
<Telerik:raddatepicker id="dteExpectedStartDte" runat="server" cssclass="fieldlabeldata"
tooltip="Select start date" Skin="Office2007">
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
LabelCssClass="radLabelCss_Office2007" />
<CALENDAR runat="server"
Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="dteExpectedStartDte"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator>
</td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltextrequired">
Expected End Date:</td>
<td class="emptycell">
</td>
<td>
<Telerik:raddatepicker id="dteExpectedEndDte" runat="server" cssclass="fieldlabeldata"
tooltip="Select end date" Skin="Office2007">
<ClientEvents OnDateSelected="DatePicker_OnDateSelected" />
<DATEINPUT Skin="Office2007" CssClass="fieldlabeldata" Font-Names="Arial"
Font-Size="11px" DateFormat="MM/dd/yyyy" ValidationGroup="Top"
LabelCssClass="radLabelCss_Office2007" />
<CALENDAR runat="server" Skin="Office2007" CssClass="fieldlabeldata" />
<DatePopupButton CssClass="radPopupImage_Office2007"></DatePopupButton>
</Telerik:raddatepicker>
<asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="dteExpectedEndDte"
ErrorMessage="*" ValidationGroup="Top"></asp:RequiredFieldValidator></td>
<td class="fieldlabeltext">
</td>
<td class="emptycell">
</td>
<td>
</td>
</tr>
<tr>
<td class="fieldlabeltext" >
Description:</td>
<td class="emptycell" >
</td>
<td colspan="4">
<Telerik:RadTextBox ID="txtDescription" runat="server"
BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter description"
Font-Names="Arial" Font-Size="11px" MaxLength="99" Skin="Office2007" ClientEvents-OnValueChanged="ResetConfirmVar" Height="15px" Width="100%" >
<EmptyMessageStyle Font-Names="Arial,verdana" />
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox></td>
</tr>
<tr>
<td class="fieldlabeltext">
Approved By:</td>
<td class="emptycell">
</td>
<td style="width: 179px">
<asp:Label ID="lblApprovedName" runat="server"></asp:Label></td>
<td class="fieldlabeltext">
Approved Date:</td>
<td class="emptycell">
</td>
<td class="emptycell">
<asp:Label ID="lblApprovedDte" runat="server"></asp:Label></td>
</tr>
<tr>
<td class="fieldlabeltext">
<asp:Label ID="lblDecline" runat="server" CssClass="fieldlabeltextrequired" Text="Decline Reason:"></asp:Label></td>
<td class="emptycell">
</td>
<td colspan="4">
<Telerik:RadTextBox ID="txtDeclineReason" runat="server" BorderColor="#93ADC7" BorderStyle="Solid"
BorderWidth="1px" Columns="60" CssClass="fieldlabeldata" EmptyMessage="Enter reason"
Font-Names="Arial" Font-Size="11px" MaxLength="29" Skin="Office2007" Rows="2" ClientEvents-OnValueChanged="ResetConfirmVar" Width="100%" >
<EmptyMessageStyle Font-Names="Arial,verdana" />
<ClientEvents OnValueChanged="ResetConfirmVar" />
</Telerik:RadTextBox></td>
</tr>
</table>
<br />
<Telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnablePageHeadUpdate="False">
<AjaxSettings>
<%--<radA:AjaxSetting AjaxControlID="btnSaveDraft">
<UpdatedControls>
<radA:AjaxUpdatedControl ControlID="ddlJobNumber" />
<radA:AjaxUpdatedControl ControlID="txtProjectName" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator8" />
<radA:AjaxUpdatedControl ControlID="ddlCostCenterNames" />
<radA:AjaxUpdatedControl ControlID="RFVCostCenterNames" />
<radA:AjaxUpdatedControl ControlID="ddlClientName" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator4" />
<radA:AjaxUpdatedControl ControlID="numBillings" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator1" />
<radA:AjaxUpdatedControl ControlID="numRevenue" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator2" />
<radA:AjaxUpdatedControl ControlID="ddlRateCard" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator7" />
<radA:AjaxUpdatedControl ControlID="dteRateEffectiveDate" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator3" />
<radA:AjaxUpdatedControl ControlID="chkNoBid" />
<radA:AjaxUpdatedControl ControlID="dteExpectedStartDte" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator5" />
<radA:AjaxUpdatedControl ControlID="dteExpectedEndDte" />
<radA:AjaxUpdatedControl ControlID="RequiredFieldValidator6" />
<radA:AjaxUpdatedControl ControlID="txtDescription" />
</UpdatedControls>
</radA:AjaxSetting>--%>
<Telerik:AjaxSetting AjaxControlID="btnRefresh">
<UpdatedControls>
<Telerik:AjaxUpdatedControl ControlID="lblFeesTotal" />
<Telerik:AjaxUpdatedControl ControlID="lblCostsTotal" />
<Telerik:AjaxUpdatedControl ControlID="lblTotalFreelanceFees" />
<Telerik:AjaxUpdatedControl ControlID="lblThirdParty" />
<Telerik:AjaxUpdatedControl ControlID="lblThirdPartyRev" />
<Telerik:AjaxUpdatedControl ControlID="lblExceed" />
<Telerik:AjaxUpdatedControl ControlID="lblCostsExceed" />
</UpdatedControls>
</Telerik:AjaxSetting>
</AjaxSettings>
</Telerik:RadAjaxManager>
<br />
<br />
Fees Grid:
<br />
<Telerik:RadGrid ID="GridFees" runat="server" AutoGenerateColumns="False" DataSourceID="SDSFeeColumns" GridLines="None" AllowAutomaticDeletes="True" AllowAutomaticUpdates="True" AllowAutomaticInserts="True" Skin="Office2007" ValidationSettings-ValidationGroup="GridFees">
<ExportSettings>
<Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
</ExportSettings>
<MasterTableView DataKeyNames="BgetNodeFeesID" DataSourceID="SDSFeeColumns" EditMode="InPlace" CommandItemDisplay="Top" ShowFooter="True">
<CommandItemTemplate>
<asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert">
<img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New
</asp:LinkButton>
</CommandItemTemplate>
<RowIndicatorColumn Visible="False">
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn Resizable="False" Visible="False">
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
UpdateImageUrl="..\Img\GridUpdateIcon.gif"
EditImageUrl="..\Img\GridEditIcon.gif"
CancelImageUrl="..\Img\GridCancelIcon.gif"
InsertImageUrl="..\Img\GridUpdateIcon.gif">
</Telerik:GridEditCommandColumn>
<Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN"
ConfirmText="Delete this row?" ButtonType="ImageButton"
ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete"><HeaderStyle Width="20px" />
</Telerik:GridClientDeleteColumn>
<Telerik:GridBoundColumn DataField="BgetNodeFeesID" DataType="System.Int64" HeaderText="BgetNodeFeesID"
ReadOnly="True" SortExpression="BgetNodeFeesID" UniqueName="BgetNodeFeesID">
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn HeaderText="Include<br/>in Sell" UniqueName="IncludeSell">
<ItemTemplate>
<asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>' />
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="RoleID" HeaderText="Role" DataField="RoleID">
<ItemTemplate>
<asp:Label ID="lblRoleID" runat="server" Text='<%# Eval("RoleName")%>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="RoleID" runat="server"
DataTextField="code_value_desc" DataValueField="RoleID"
SelectedValue='<%# Bind("RoleID") %>'
DataSourceID="SDSRoles" AppendDataBoundItems="true"
OnSelectedIndexChanged="FeesRoleID_SelectedIndexChanged" ValidationGroup="GridFees">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVRoleID" runat="server" ErrorMessage="*" ControlToValidate="RoleID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SourcesID" HeaderText="Source" DataField="SourcesID">
<ItemTemplate>
<asp:Label ID="lblSourcesID" runat="server" Text='<%# Eval("Sources")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="SourcesID" runat="server"
DataTextField="Sources" DataValueField="SourcesID" SelectedValue='<%# Bind("SourcesID") %>'
DataSourceID="SDSSources" AppendDataBoundItems="true"
OnSelectedIndexChanged="FeesSourcesID_SelectedIndexChanged" ValidationGroup="GridFees">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVSourcesID" runat="server" ErrorMessage="*" ControlToValidate="SourcesID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Resource" HeaderText="Resource" DataField="Resource">
<ItemTemplate>
<asp:Label ID="lblResource" runat="server" Text='<%# Eval("Resource")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radTextBox ID="Resource" runat="server" Text='<%# Bind("Resource")%>' Width="50"
EnabledStyle-HorizontalAlign="Right">
</Telerik:radTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top"/>
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="CostCenterID" HeaderText="Cost Center" DataField="CostCenterID">
<ItemTemplate>
<asp:Label ID="lblCostCenterID" runat="server" Text='<%# Eval("CostCenterName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="CostCenterID" runat="server"
DataTextField="CostCenter" DataValueField="ID" SelectedValue='<%# Bind("CostCenterID") %>'
DataSourceID="SDSCostCenters" AppendDataBoundItems="true" ValidationGroup="GridFees"
OnSelectedIndexChanged="FeesCostCenterID_SelectedIndexChanged">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVCostCenterID" runat="server" ErrorMessage="*" ControlToValidate="CostCenterID" ValidationGroup="GridFees"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
UniqueName="Description" MaxLength="29">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn UniqueName="Hours" HeaderText="Hours" DataField="Hours">
<ItemTemplate>
<asp:Label ID="lblHours" runat="server" Text='<%# Eval("Hours", "{0:N0}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Hours" runat="server" Text='<%# Bind("Hours")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" OnTextChanged="FeesHours_SelectedIndexChanged">
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
<ItemTemplate>
<asp:Label ID="lblContingency" runat="server" Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="FeesContingency_SelectedIndexChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radNumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="TotalHours" HeaderText="Total Hours" DataField="TotalHours">
<ItemTemplate>
<asp:Label ID="lblTotalHours" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Cost" HeaderText="Cost" DataField="Cost">
<ItemTemplate>
<asp:Label ID="lblCost" runat="server" Text='<%# Eval("Cost","${0:0.00}")%>' ></asp:Label>
<asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Cost" runat="server" Text='<%# Bind("Cost")%>' Width="50"
EnabledStyle-HorizontalAlign="Right">
</Telerik:radnumericTextBox>
<Telerik:radTextBox runat="server" ID="CostStars" Text='<%# Bind("CostStars") %>' Width="50" OnTextChanged="FeesCostStars_TextChanged" AutoPostBack="true">
</Telerik:radTextBox>
<asp:Label ID="lblCostStars" Text="*****" runat="server" Width="50"></asp:Label>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SellRate" HeaderText="Sell<br/>Rate" DataField="SellRate">
<ItemTemplate>
<asp:Label ID="lblSellRate" runat="server" Text='<%# Eval("SellRate", "${0:0.00}")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<%-- <radI:radnumericTextBox ID="SellRate" runat="server" Text='<%# Bind("SellRate")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="FeesSellRate_SelectedIndexChanged"></radI:radnumericTextBox>--%>
<asp:Label ID="lblSellRate" runat="server" Text='<%# Bind("SellRate")%>' ></asp:Label>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="SubTotal" DataField="SubTotal">
<ItemTemplate>
<asp:Label ID="lblSubTotal" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj <br/>(MU/MD %)" DataField="Markup">
<ItemTemplate>
<asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="FeesMarkup_SelectedIndexChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total" DataField="Total">
<ItemTemplate>
<asp:Label ID="lblTotal" runat="server" ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<ValidationSettings ValidationGroup="GridFees" />
</Telerik:RadGrid>
<br />
<br />
Costs Grid:<br />
<Telerik:RadGrid ID="GridCosts" runat="server" AutoGenerateColumns="False" DataSourceID="SDSCostColumns" GridLines="None" Skin="Office2007" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" ValidationSettings-ValidationGroup="GridCosts">
<ExportSettings>
<Pdf PageBottomMargin="" PageFooterMargin="" PageHeaderMargin="" PageHeight="11in"
PageLeftMargin="" PageRightMargin="" PageTopMargin="" PageWidth="8.5in" />
</ExportSettings>
<MasterTableView DataKeyNames="BgetNodeCostID" DataSourceID="SDSCostColumns" CommandItemDisplay="Top" EditMode="InPlace" ShowFooter="True">
<CommandItemTemplate>
<asp:LinkButton ID="InitInsertButton" runat="server" CommandName="InitInsert"><img style="border:0px" alt="" src="..\img\AddRecord.gif" />Add New</asp:LinkButton>
</CommandItemTemplate>
<RowIndicatorColumn Visible="False">
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn Resizable="False" Visible="False">
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<Telerik:GridEditCommandColumn UniqueName="EDITCOLUMN" ButtonType="ImageButton"
UpdateImageUrl="..\Img\GridUpdateIcon.gif"
EditImageUrl="..\Img\GridEditIcon.gif"
CancelImageUrl="..\Img\GridCancelIcon.gif"
InsertImageUrl="..\Img\GridUpdateIcon.gif">
</Telerik:GridEditCommandColumn>
<Telerik:GridClientDeleteColumn UniqueName="DELETECOLUMN" ConfirmText="Delete this row?"
ButtonType="ImageButton"
ImageUrl="..\Img\GridDeleteIcon.gif" Text="Delete">
<HeaderStyle Width="20px" />
</Telerik:GridClientDeleteColumn>
<Telerik:GridBoundColumn DataField="BgetNodeCostID" DataType="System.Int64" HeaderText="BgetNodeCostID"
ReadOnly="True" SortExpression="BgetNodeCostID" UniqueName="BgetNodeCostID">
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn HeaderText="Include<br/>in Sell" UniqueName="IncludeSell">
<ItemTemplate>
<asp:CheckBox ID="lblIncludeSell" Runat="server" Checked='<%# Eval("IncludeSell")%>' Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="IncludeSell" Runat="server" Checked='<%# Bind("IncludeSell") %>' />
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="ActvID" HeaderText="Activity" DataField="ActvID">
<ItemTemplate>
<asp:Label ID="lblActvID" runat="server" Text='<%# Eval("ActivityName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ActvID" runat="server"
DataTextField="code_value_desc" DataValueField="ActvID" SelectedValue='<%# Bind("ActvID") %>'
DataSourceID="SDSActivities" AppendDataBoundItems="true"
OnSelectedIndexChanged="CostsActivityID_SelectedIndexChanged" ValidationGroup="GridCosts">
<asp:ListItem Text="- Select One -" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVActvID" runat="server" ErrorMessage="*" ControlToValidate="ActvID" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubActvID" HeaderText="SubActivity" DataField="SubActvID">
<ItemTemplate>
<asp:Label ID="lblSubActvID" runat="server" Text='<%# Eval("SubActivityName")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="SubActvID" runat="server" DataTextField="SubActvName" DataValueField="SubActvID" ValidationGroup="GridCosts">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVSubActvID" runat="server" ErrorMessage="*" ControlToValidate="SubActvID" InitialValue= "- Select One -" ValidationGroup="GridCosts"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridBoundColumn DataField="Description" HeaderText="Description" SortExpression="Description"
UniqueName="Description" MaxLength="29">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridBoundColumn DataField="Resource" HeaderText="Resource" SortExpression="Resource"
UniqueName="Resource">
<ItemStyle VerticalAlign="Top" />
</Telerik:GridBoundColumn>
<Telerik:GridTemplateColumn UniqueName="Qty" HeaderText="Quantity" DataField="Qty">
<ItemTemplate>
<asp:Label ID="lblQty" runat="server" Text='<%# Eval("Qty", "{0:N0}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Qty" runat="server" Text='<%# Bind("Qty")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" AutoPostBack="true" OnTextChanged="CostsQty_TextChanged"></Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="CostRate" HeaderText="Cost" DataField="CostRate">
<ItemTemplate>
<asp:Label ID="lblCostRate" runat="server" Text='<%# Eval("CostRate", "${0:0.00}" )%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="CostRate" runat="server" Text='<%# Bind("CostRate")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" OnTextChanged="CostsCostRate_TextChanged"></Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Contingency" HeaderText="Contingency" DataField="Contingency">
<ItemTemplate>
<asp:Label ID="lblContingency" runat="server" Text='<%# Eval("Contingency","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radNumericTextBox ID="Contingency" runat="server" Text='<%# Bind("Contingency")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="CostsContingency_TextChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radNumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="SubTotal" HeaderText="Sub Total" >
<ItemTemplate>
<asp:Label ID="lblSubTotal" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Markup" HeaderText="Adj <br/>(MU/MD %)" DataField="Markup">
<ItemTemplate>
<asp:Label ID="lblMarkup" runat="server" Text='<%# Eval("Markup","{0:0.00} %")%>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<Telerik:radnumericTextBox ID="Markup" runat="server" Text='<%# Bind("Markup")%>' Width="50"
EnabledStyle-HorizontalAlign="Right" Type="Percent" OnTextChanged="CostsMarkup_TextChanged">
<NumberFormat DecimalDigits="2" />
</Telerik:radnumericTextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
<Telerik:GridTemplateColumn UniqueName="Total" HeaderText="Total">
<ItemTemplate>
<asp:Label ID="lblTotal" runat="server" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Right" VerticalAlign="Top" />
</Telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<ValidationSettings ValidationGroup="GridCosts" />
</Telerik:RadGrid><br />
<br />
<br />
<br />
<asp:SqlDataSource ID="SDSCostColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
DeleteCommand="proc_xBudgetNodeCostsDelete" DeleteCommandType="StoredProcedure"
InsertCommand="proc_xBudgetNodeCostsInsert" InsertCommandType="StoredProcedure"
SelectCommand="proc_xBudgetNodeCostsByBReqID" SelectCommandType="StoredProcedure"
UpdateCommand="proc_xBudgetNodeCostsUpdate" UpdateCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="BgetNodeCostID" Type="Int64" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Direction="InputOutput" Name="BgetNodeCostID" Type="Int64" />
<asp:QueryStringParameter Name="BudgetNodeID" QueryStringField="BNID" Type="Int64" />
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="ActvID" Type="String" />
<%-- <asp:Parameter Name="SubActvID" Type="Int64" /> This is set in the InsertCommand in code behind --%>
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="TypeID" Type="Int64" />
<asp:Parameter Name="Qty" Type="Int64" />
<asp:Parameter Name="CostRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />
</InsertParameters>
<UpdateParameters>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="ActvID" Type="String" />
<%--<asp:Parameter Name="SubActvID" Type="Int64" /> This is set in the UpdateCommand in code behind--%>
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="TypeID" Type="Int64" />
<asp:Parameter Name="Qty" Type="Int64" />
<asp:Parameter Name="CostRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSFeeColumns" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
DeleteCommand="proc_xBudgetNodeFeesDelete" DeleteCommandType="StoredProcedure"
InsertCommand="proc_xBudgetNodeFeesInsertByBudReqID" InsertCommandType="StoredProcedure"
SelectCommand="proc_xBudgetNodeFeesByBReqID" SelectCommandType="StoredProcedure"
UpdateCommand="proc_xBudgetNodeFeesUpdate" UpdateCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="BudgetReqID" QueryStringField="BReqID" Type="Int64" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="BgetNodeFeesID" Type="Int64" />
<asp:Parameter Name="BudgetNodeID" Type="Int64" />
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="RoleID" Type="String" />
<asp:Parameter Name="SourcesID" Type="String" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="CostCenterID" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Hours" Type="Int32" />
<asp:Parameter Name="Cost" Type="Decimal" />
<asp:Parameter Name="CostStars" Type="String" />
<asp:Parameter Name="SellRate" Type="Decimal" />
<%--<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />--%>
</UpdateParameters>
<InsertParameters>
<%-- <asp:Parameter Direction="InputOutput" Name="BgetNodeFeesID" Type="Int64" />--%>
<%-- <asp:Parameter Name="BudgetNodeID" Type="Int64" />--%>
<asp:QueryStringParameter Name="BudReqID" QueryStringField="BReqID" Type="Int64" />
<asp:Parameter Name="RoleID" Type="String" />
<asp:Parameter Name="SourcesID" Type="Int64" />
<asp:Parameter Name="Resource" Type="String" />
<asp:Parameter Name="CostCenterID" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Hours" Type="Int32" />
<asp:Parameter Name="Cost" Type="Decimal" />
<asp:Parameter Name="CostStars" Type="String" />
<asp:Parameter Name="SellRate" Type="Decimal" />
<asp:Parameter Name="MarkUp" Type="Double" />
<asp:Parameter Name="Contingency" Type="Double" />
<asp:Parameter Name="IncludeSell" Type="Boolean" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSRoles" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xRoleNamesByRateCardID" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
<asp:ControlParameter ControlID="ddlRateCard" Name="RateID" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSSources" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xSourcesLoadAllByCompanyID" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSCostCenters" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xCostCenterProfileByName" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="CompanyID" SessionField="ID" Type="String" />
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSSubActivities" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xSubActivitiesLoadAllByCompanyIDIsViewable" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:QueryStringParameter Name="CompanyID" QueryStringField="ID" Type="Int64" />
<asp:Parameter DefaultValue="1585" Name="ActivityID" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sdsCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xCustomerLoadAllActiveOther" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="sdsRateCards" runat="server" ConnectionString="<%$ ConnectionStrings:BudgetConnectionString %>"
SelectCommand="proc_xRateNamesAllOther" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SDSJobNumbers" runat="server" ConnectionString="<%$ ConnectionStrings:Budget2ConnectionString %>"
SelectCommand="proc_ReturnAvailableJobNumbers" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="DBName" SessionField="DBName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</div>
</asp:Content>
<%-- </form>
</body>
</html>--%>
ASPX.VB
Imports System.Data
Imports System.Data.SqlClient
Imports Telerik.Web.UI
Imports System.Math
Imports PBDAL.StoredProcedureCallerClasses
Imports Budget.Roles.BudgetRoleProvider
Imports System.Text
Imports RequestProcess
Imports MailUtilities
Imports PBBRL.EntityClass.xProject
Imports PBBRL.EntityClass.xProjectRequest
Partial Class Requests_ProposalRequest
Inherits PBBRL.BasePage.MyBasePage
Dim GridTotalHours As Integer
Dim GridTotalHoursWithCont, GridSubTotal, GridTotal As Double
Dim GridCostsSubTotal, GridCOstsTotal, GridSubTotalWithoutCont, GridCOstsSubTotalNoCont As Double
Dim EditDoc As Boolean = True
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim EditDoc As Boolean = True
Try
ViewState.Add("CompanyID", Request.QueryString("ID").ToString())
Catch
ViewState.Add("CompanyID", "")
End Try
Try
ViewState.Add("BudReqID", Request.QueryString("BReqID").ToString())
Catch
ViewState.Add("BudReqID", "")
End Try
Dim Temp As String = Session("DBName")
If Not IsPostBack Then
''Load Page Headers
''Do this if it is being loaded for the first time
Master.DisplayDataFromPage("Proposal Request")
Master.GetMenuDataSourceFromPage("ProjectRequestsSiteMap")
If ViewState.Item("BudReqID") <> "" Then
'Load the existing values from ProjectRequest
Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
obj.FetchUsingPK(ViewState.Item("BudReqID"))
If obj.RateCardId.ToString <> "" Then
Me.ddlRateCard.SelectedValue = obj.RateCardId
ViewState.Add("RateCardID", obj.RateCardId)
End If
If obj.EffectiveDate.HasValue Then
Me.dteRateEffectiveDate.SelectedDate = obj.EffectiveDate
ViewState.Add("EffectiveDate", obj.EffectiveDate)
End If
If obj.ProjDesc.ToString <> "" Then
Me.txtDescription.Text = obj.ProjDesc
End If
If obj.ApprovalName.ToString <> "" Then
Me.lblApprovedName.Text = obj.ApprovalName
End If
If obj.ApprovalDate.HasValue Then
Me.lblApprovedDte.Text = obj.ApprovalDate.ToString
End If
If obj.Billings.HasValue Then
Me.numBillings.Text = CType(obj.Billings, String)
End If
If obj.Revenue.HasValue Then
Me.numRevenue.Text = CType(obj.Revenue, String)
End If
If obj.ExpectedStartDate.HasValue Then
Me.dteExpectedStartDte.SelectedDate = obj.ExpectedStartDate
End If
If obj.ExpectedEndDate.HasValue Then
Me.dteExpectedEndDte.SelectedDate = obj.ExpectedEndDate
End If
If obj.NoBid.HasValue Then
Me.chkNoBid.Checked = obj.NoBid
End If
If obj.CostCenterId.ToString <> "" Then
Me.ddlCostCenterNames.SelectedValue = obj.CostCenterId
ViewState.Add("CostCenterID", obj.CostCenterId)
End If
If obj.CustId.ToString <> "" Then
Me.ddlClientName.SelectedValue = obj.CustId
End If
If obj.RequestStatus <> "" Then
Me.txtRequestStatus.Text = obj.RequestStatus
End If
If obj.ProjectName <> "" Then
Me.txtProjectName.Text = obj.ProjectName
End If
If obj.JobNumber <> "" Then
'First see if it is still available
Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcJobNumberStillAvailable(Session("DBName"), obj.JobNumber)
If dt.Rows.Count > 0 Then
'There's a matching JobNumber
Me.ddlJobNumber.SelectedValue = obj.JobNumber
Me.lblJobNumber.Visible = False
Else
'Not available any more
Me.lblJobNumber.Text = obj.JobNumber
Me.ddlJobNumber.Visible = False
End If
End If
'See if user can edit it
Dim LockedBy As String = WhoLockedRecord(ViewState.Item("BudReqID"), "BReqID", Nothing, "Open")
'if Request status is declined, no one can edit
If Me.txtRequestStatus.Text = "Declined" Then
SetNoEditAccess()
Else
'Role/Access/Lock check
If FindUserInRequestBudReq(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterView(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInCompanyView(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
'if they can read, Check the Edit Access
If FindUserInRequestBudReqEdit(Session("UserName"), ViewState.Item("BudReqID")) Or FindUserInCostCenterFM(Session("UserName"), ViewState.Item("CostCenterID")) Or FindUserInSystem(Session("UserName")) Or FindUserInCompanyAdmin(Session("UserName"), ViewState.Item("CompanyID")) Or FindUserInCostCenterAdmin(Session("UserName"), ViewState.Item("CostCenterID")) Then
'The user has access
If LockedBy = "" Or LockedBy = "Me" Then
'It's not locked
If Me.txtRequestStatus.Text = "Approved" Then
EditDoc = False
Me.lblEditStatus.Text = "You do not have access to modify this page because it has already been Approved"
End If
ElseIf LockedBy <> "" Then
'It is locked
EditDoc = False
Me.lblEditStatus.Text = "This record is currently locked by: " & LockedBy
End If
Else
'USer has no access
EditDoc = False
Me.lblEditStatus.Text = "You do not have access to modify this page"
End If
If EditDoc = False Then
SetNoEditAccess()
End If
Else
'don't open page
'Define the JavaScript function for the specified control.
Dim focusScript As String = "<script language='javascript'>window.alert('You do not have access to view this page. Please contact the producer for assistance.'); window.history.back();</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
End If
End If
'Hide the Columns in the Grid, depending on Company Profile
HideColumns()
'Get values from Cost Center
Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
objCostCenter.FetchUsingPK(ViewState.Item("CostCenterID"))
ViewState.Add("HideCosts", objCostCenter.HideCosts)
If objCostCenter.ProposalPercentage.HasValue Then
ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
Else
ViewState.Add("ExceedPercentage", 0)
Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)
End If
'Calculate Totals
CalculateTotals()
End If
End If
'See if user can edit it
ClientScript.RegisterOnSubmitStatement(Me.GetType(), "OnSubmitScript", "needToConfirm = false;")
End Sub
Sub SetNoEditAccess()
'It's locked or you have no access - Change all fields to read only
' 'Change all fields to read only
Me.GridFees.MasterTableView.GetColumn("EditColumn").Display = False
Me.GridFees.MasterTableView.GetColumn("DeleteColumn").Display = False
Me.GridFees.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
Me.GridCosts.MasterTableView.GetColumn("EditColumn").Display = False
Me.GridCosts.MasterTableView.GetColumn("DeleteColumn").Display = False
Me.GridCosts.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.None
Me.btnSaveDraft.Visible = False
Me.btnSubmit.Visible = False
Me.btnCalculateRates.Visible = False
Me.btnRefresh.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.txtProjectName.Enabled = False
Me.ddlCostCenterNames.Enabled = False
Me.ddlClientName.Enabled = False
Me.numBillings.Enabled = False
Me.numRevenue.Enabled = False
Me.ddlRateCard.Enabled = False
Me.dteRateEffectiveDate.Enabled = False
Me.chkNoBid.Enabled = False
Me.dteExpectedEndDte.Enabled = False
Me.dteExpectedStartDte.Enabled = False
Me.txtDescription.Enabled = False
Me.ddlJobNumber.Enabled = False
Me.txtDeclineReason.Enabled = False
End Sub
Public Sub HideColumns()
Dim VisibleColumn As String
'FEES GRID
'This will loop through Columns that should be there
'Set up connection
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader = dao.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeFeesAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
Dim VisibleColumnArray As New ArrayList
While reader.Read()
'reading from the datareader
VisibleColumn = reader(0).ToString().ToUpper
VisibleColumnArray.Add(VisibleColumn)
End While
reader.Close()
Dim x As Integer
For x = 0 To Me.GridFees.MasterTableView.Columns.Count - 1
Dim PossibleColumnName As String = Me.GridFees.MasterTableView.Columns(x).UniqueName.ToUpper
If VisibleColumnArray.Contains(PossibleColumnName) Then
'It's OK
ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
'It's OK
Else
Me.GridFees.MasterTableView.Columns(x).Visible = False
End If
Next
''COSTS GRID
''This will loop through Columns that should be there
''Set up connection
Dim dao2 As New PBDAL.DaoClasses.TypedListDAO()
Dim reader2 As IDataReader = dao2.GetAsDataReader(Nothing, PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.GetProcXBudgetNodeCostsAllViewableProposalRequestCallAsQuery(ViewState.Item("CompanyID")), CommandBehavior.CloseConnection)
Dim VisibleColumnArray2 As New ArrayList
While reader2.Read()
'reading from the datareader
VisibleColumn = reader2(0).ToString().ToUpper
VisibleColumnArray2.Add(VisibleColumn)
End While
reader2.Close()
Dim y As Integer
For y = 0 To Me.GridCosts.MasterTableView.Columns.Count - 1
Dim PossibleColumnName As String = Me.GridCosts.MasterTableView.Columns(y).UniqueName.ToUpper
If VisibleColumnArray2.Contains(PossibleColumnName) Then
'It's OK
ElseIf PossibleColumnName = "DELETECOLUMN" Or PossibleColumnName = "EDITCOLUMN" Or PossibleColumnName = "TOTAL" Then
'It's OK
Else
Me.GridCosts.MasterTableView.Columns(y).Visible = False
End If
Next
End Sub
'Buttons
Protected Sub btnSaveDraft_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.Click
Dim BudReqID As Integer
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim ProjectNumber As String = Me.ddlJobNumber.SelectedValue
If ProjectNumber = "0" Then
ProjectNumber = Nothing
End If
'Just saves the header information
If Me.txtRequestStatus.Text = "" Then
'It's new, save a new Request
PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, CType(Billings, Integer), CType(Revenue, Integer), PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
Me.txtRequestStatus.Text = "Draft"
ViewState.Add("BudReqID", BudReqID)
AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
Response.Redirect("~/Requests/ProposalRequest.aspx?ID=" + ViewState.Item("CompanyID").ToString + "&BReqID=" + ViewState.Item("BudReqID").ToString)
Else
'It already exists, just update it
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
End If
End Sub
Protected Sub btnSaveDraft_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveDraft.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Then
Me.btnSaveDraft.Visible = True
Else
Me.btnSaveDraft.Visible = False
End If
End Sub
Protected Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
CalculateTotals()
End Sub
Protected Sub btnRefresh_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.PreRender
If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnRefresh.Visible = False
Else
Me.btnRefresh.Visible = True
End If
End Sub
Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
'Get values to get updated
Dim BudReqID As Integer
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim BNFeesID As Integer = 0
Dim BNCostID As Integer = 0
Dim feesMarkup As Integer = 0
Dim feesCont As Integer = 0
Dim costsMarkup As Integer = 0
Dim costsCont As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim Body As String = ""
Dim RevRecogID As Integer
Dim CreatedBy As String
Dim CreatedDte As String
'Get ProjectNumber
ProjectNumber = Me.ddlJobNumber.SelectedItem.Value
If ProjectNumber <> "0" Then
ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
Else
ProjectNumber = Nothing
End If
'validate required fields
Validate()
'first save updates to tables if there is one already or create one
If ViewState.Item("BudReqID").ToString = "" Then
PBBRL.EntityClass.xProjectRequest.AddProjectRequest(CCID, ClientID, EStartDte, EEndDte, ReqStatus, RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber, Session("UserName"), BudReqID)
ViewState.Add("BudReqID", CType(BudReqID, String))
'Add User to access table
AddUserToRole(Session("UserName"), ViewState.Item("BudReqID"), "RequestAccessProposal", "EditAccess")
Else
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
End If
'If Nobid then no approval needed - create budget structure
'else send for approval and update status
If NoBid Then
'Update request status, create Project profile, create standard budget structure, and put request in as proposal
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)
'Get Creator of request
Dim obj1 As New PBDAL.EntityClasses.XProjectRequestEntity
obj1.FetchUsingPK(ViewState.Item("BudReqID"))
CreatedBy = obj1.CreatedBy
CreatedDte = obj1.CreatedDate
'Get Cost Center defaults for Project Profile
Dim obj As New PBDAL.EntityClasses.XCostCenterProfileEntity
obj.FetchUsingPK(ViewState.Item("CostCenterID"))
feesMarkup = obj.FeeMarkUp
feesCont = obj.FeeContingency
costsMarkup = obj.CostMarkUp
costsCont = obj.CostContingency
RevRecogId = obj.RevRecogId
'Create Project Profile
PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, RevRecogID, NewPID)
'Give access to project profile
AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")
'Creates Default Budget Structure and creates new budget
PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)
'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))
'Get the New BudgetNodeID
PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)
'Give access to proposal
AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")
'Get BudgetNodeFeesID and update with BudgetNode ID
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNFeesID = reader.GetValue(3)
If BNFeesID <> 0 Then
PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
'Get BudgetNodeCostsID and update with BudgetNodeID
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNCostID = reader.GetValue(4)
If BNCostID <> 0 Then
PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
reader.Close()
'Update request status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "No Approval Needed", Nothing)
Me.txtRequestStatus.Text = "No Approval Needed"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
'Send user to Project Home Page
Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
Else
SendTo = GetEmailByRole("ProposalRequestApprover", ViewState.Item("CostCenterID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There is no proposal request approver for this cost center. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
SubmitForApprovalBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), ViewState.Item("CompanyID"), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for " & Me.txtProjectName.Text & " needs your approval", Body)
'Update status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Submitted for Approval", Nothing)
Me.txtRequestStatus.Text = "Sumbmitted for Approval"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
Response.Redirect("~")
End If
End If
End Sub
Protected Sub btnSubmit_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.PreRender
If Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnSubmit.Visible = True
Else
Me.btnSubmit.Visible = False
End If
End Sub
Protected Sub btnCalculateRates_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.Click
'They've chosen a new Rate Card and/or Effective Date - change the Rates for all line items for all nodes for all Budgets for this Project
'Assign values
Dim RateTypeCD As String
Dim RateCardID As String = Me.ddlRateCard.SelectedValue
Dim EffectiveDate As Date = Me.dteRateEffectiveDate.SelectedDate
Dim PROJ As String = Me.ddlJobNumber.Text
Dim OFFC As String = Me.ddlCostCenterNames.SelectedValue
Dim CUST As String = Me.ddlClientName.SelectedValue
'Get line items
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim temp As String = Session("DBName")
Dim reader As IDataReader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
'Get RoleID and EmployeeID from Line Item
Dim FeesID As String = reader.GetValue(3)
Dim LABC As String = reader.GetValue(0)
Dim EMP As String
Try
EMP = reader.GetValue(8)
Catch ex As Exception
EMP = ""
End Try
'If reader.GetValue(8) = Null Then
' EMP = ""
'Else
' EMP = reader.GetValue(8)
'End If
'First get Sell Rate
RateTypeCD = "BR"
Dim SellRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
'Then get Cost Rate
RateTypeCD = "CR"
Dim CostRate As Double = CalculateRates(RateCardID, RateTypeCD, EffectiveDate, LABC, EMP, PROJ, OFFC, CUST)
'Update the Sell and Cost rate for that Line Item
PBBRL.EntityClass.xBudgetNodeFees.UpdateSellAndCostRate(FeesID, SellRate, CostRate)
Loop
Me.GridFees.Rebind()
' Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXBudgetNodeFeesByBreqId(ViewState.Item("BudReqID"), ViewState.Item("DBName"))
End Sub
Protected Sub btnCalculateRates_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCalculateRates.PreRender
If Me.txtRequestStatus.Text = "Approved" Or Me.txtRequestStatus.Text = "Declined" Then
Me.btnCalculateRates.Visible = False
Else
Me.btnCalculateRates.Visible = True
End If
End Sub
Protected Sub btnApprove_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.Click
'Get values to get updated in case DOP made changes
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim rateCardID As String = Me.ddlRateCard.SelectedValue
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim Bid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim feesMarkup As Integer = 0
Dim feesCont As Integer = 0
Dim costsMarkup As Integer = 0
Dim costsCont As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim CreatedBy As String
Dim CreatedDte As String
Dim Body As String = ""
Dim BNFeesID As Integer = 0
Dim BNCostID As Integer = 0
Dim revRecogID As Integer
'Get Creator of request
Dim obj As New PBDAL.EntityClasses.XProjectRequestEntity
obj.FetchUsingPK(ViewState.Item("BudReqID"))
CreatedBy = obj.CreatedBy
CreatedDte = obj.CreatedDate
'Get ProjectNumber
If Me.ddlJobNumber.SelectedItem.Text <> "" Then
ProjectNumber = Me.ddlJobNumber.SelectedItem.Text
End If
'validate required fields
Validate()
SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Update Project Request in case changes where made
PBBRL.EntityClass.xProjectRequest.UpdateProjectRequest(ViewState.Item("BudReqID"), CCID, ClientID, EStartDte, EEndDte, "Draft", RCardID, Billings, Revenue, PDesc, NoBid, Me.txtProjectName.Text, EffDate, ProjectNumber)
'Get Cost Center defaults for Project Profile
Dim objCC As New PBDAL.EntityClasses.XCostCenterProfileEntity
objCC.FetchUsingPK(ViewState.Item("CostCenterID"))
feesMarkup = objCC.FeeMarkUp
feesCont = objCC.FeeContingency
costsMarkup = objCC.CostMarkUp
costsCont = objCC.CostContingency
revRecogID = objCC.RevRecogId
'Create Project Profile
PBBRL.EntityClass.xProject.CreateProjectProfile(Me.txtProjectName.Text, ClientID, ProjectNumber, RCardID, EStartDte, EEndDte, CCID, ViewState.Item("BudReqID"), CreatedBy, CreatedDte, Nothing, EffDate, feesMarkup, feesCont, costsMarkup, costsCont, revRecogID, NewPID)
'Give access to project profile
AddUserToRole(Session("UserName"), NewPID, "ProjectAccess", "EditAccess")
AddUserToRole(CreatedBy, NewPID, "ProjectAccess", "EditAccess")
'Creates Default Budget Structure and creates new budget
PBBRL.EntityClass.xBudget.NewActiveBudget("New", NewPID, Me.txtProjectName.Text, NewBudgetID)
'Create the Edit Navigation, Project Rollup, and Proposal Budget nodes
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Edit Navigation", NewPID, NewBudgetID, 0, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Proposal Node", NewPID, NewBudgetID, 2, GetTodaysDateTime(), Session("UserName"))
PBBRL.EntityClass.xBudgetNode.AddEmptyNavigation(Nothing, "Budget Rollup", NewPID, NewBudgetID, 1, GetTodaysDateTime(), Session("UserName"))
'Get the New BudgetNodeID
PBBRL.EntityClass.xBudgetNode.GetBudgetNodeIDofProposal(NewBudgetID, BudgetNodeID)
'Give access to proposal
AddUserToRole(Session("UserName"), BudgetNodeID, "ProposalAccess", "EditAccess")
AddUserToRole(CreatedBy, BudgetNodeID, "ProposalAccess", "EditAccess")
'Get BudgetNodeFeesID and update with BudgetNode ID
Dim dao As New PBDAL.DaoClasses.TypedListDAO()
Dim reader As IDataReader
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeFeesByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNFeesID = reader.GetValue(3)
If BNFeesID <> 0 Then
PBBRL.EntityClass.xBudgetNodeFees.UpdateBudgetNodeID(BNFeesID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
'Get BudgetNodeCostsID and update with BudgetNodeID
reader = dao.GetAsDataReader(Nothing, RetrievalProcedures.GetProcXBudgetNodeCostsByBreqIdCallAsQuery(ViewState.Item("BudReqID"), Session("DBName")), CommandBehavior.CloseConnection)
Do While reader.Read()
BNCostID = reader.GetValue(4)
If BNCostID <> 0 Then
PBBRL.EntityClass.xBudgetNodeCosts.UpdateBudgetNodeID(BNCostID, BudgetNodeID, ViewState.Item("BudReqID"))
End If
Loop
reader.Close()
'Update request status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Approved", Nothing)
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
ApprovedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), CType(NewPID, String), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Approved", Body)
Me.txtRequestStatus.Text = "Approved"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
Me.btnSaveDraft.Visible = False
'Send user to Project Home Page
Response.Redirect("~/Project/ProjectHome.aspx?PID=" & CType(NewPID, String) & "")
End If
End Sub
Protected Sub btnApprove_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnApprove.PreRender
If Me.txtRequestStatus.Text = "Submitted for Approval" Then
Me.btnApprove.Visible = True
Else
Me.btnApprove.Visible = False
End If
End Sub
Protected Sub btnDeclined_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.Click
'Get values to get updated in case DOP made changes
Dim CCID As String = Me.ddlCostCenterNames.SelectedValue
Dim ClientID As String = Me.ddlClientName.SelectedValue
Dim ClientName As String = Trim(Me.ddlClientName.SelectedItem.Text)
Dim ProjectName As String = Me.txtProjectName.Text
Dim EStartDte As DateTime = Me.dteExpectedStartDte.SelectedDate
Dim EEndDte As DateTime = Me.dteExpectedEndDte.SelectedDate
Dim ReqStatus As String = Me.txtRequestStatus.Text
Dim ProjectNumber As String = ""
Dim rateCardID As String = Me.ddlRateCard.SelectedValue
Dim Billings As Integer = Me.numBillings.Value
Dim Revenue As Integer = Me.numRevenue.Value
Dim PDesc As String = Me.txtDescription.Text
Dim NoBid As Boolean = Me.chkNoBid.Checked
Dim Bid As Boolean = Me.chkNoBid.Checked
Dim RCardID As String = Me.ddlRateCard.SelectedValue
Dim EffDate As DateTime = Me.dteRateEffectiveDate.SelectedDate
Dim NewPID As String = ""
Dim NewBudgetID As Integer = 0
Dim BudgetNodeID As Integer = 0
Dim FromUser As New Net.Mail.MailAddress(GetUserEmail())
Dim SendTo() As String
Dim CCopy(0) As String
Dim BCopy(0) As String
Dim Body As String = ""
'validate required fields
Validate()
If Me.txtDeclineReason.Text = "" Then
Me.lblErrorMessage.Controls.Add(New LiteralControl("Enter declined reason" + "<br/>"))
Else
SendTo = GetEmailByRole("ProposalRequestUsers", ViewState.Item("BudReqID"))
If SendTo.Length = 0 Then
Dim focusScript As String = "<script language='javascript'>alert('There are no proposal request team members for this request. Please contact the producer for assistance.');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onLoadCall", focusScript)
Else
'Send out Notification
CCopy(0) = ""
BCopy(0) = ""
DeclinedBody(ClientName, ProjectName, CType(EEndDte, String), String.Format("{0:C}", CType(Revenue, Integer)), ViewState.Item("BudReqID"), Session("ID"), Body)
SendMail(FromUser, SendTo, CCopy, BCopy, "Proposal Request for '" & ClientName & "' has been Declined", Body)
'Update status
PBBRL.EntityClass.xProjectRequest.UpdateStatus(ViewState.Item("BudReqID"), "Declined", Me.txtDeclineReason.Text)
Me.txtRequestStatus.Text = "Declined"
Me.btnSubmit.Visible = False
Me.btnApprove.Visible = False
Me.btnDeclined.Visible = False
End If
'Send user to Project Home Page
Response.Redirect("../Default.aspx")
End If
End Sub
Protected Sub btnDeclined_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDeclined.PreRender
If Me.txtRequestStatus.Text = "Submitted for Approval" Then
Me.btnDeclined.Visible = True
Else
Me.btnDeclined.Visible = False
End If
End Sub
Protected Sub GridFees_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridFees.ItemCommand
If (e.CommandName = RadGrid.InitInsertCommandName) Then
'This will set teh default value of the IncludeSell Check box
e.Canceled = True
'Prepare an IDictionary with the predefined values
Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
'set initial checked state for the checkbox on init insert
newValues("IncludeSell") = True
'Insert the item and rebind
e.Item.OwnerTableView.InsertItem(newValues)
End If
End Sub
Protected Sub GridFees_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridFees.ItemDataBound
If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
'This happens when a row goes into Insert mode
Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'MarkupText.Text = ViewState.Item("FeeMarkup")
'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'ContingencyText.Text = ViewState.Item("FeeContingency")
GridItem.FindControl("Cost").Visible = True
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = False
ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
'Called everytime the Grid is built/Insert/Update
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
Dim Hours As Double
'Dim Contingency As Double
Dim SellRate As Double
'Dim Markup As Double
'Dim SourcesID As String
'Get values for row
Dim HoursField As Label = CType(GridItem("Hours").FindControl("lblHours"), Label)
If HoursField.Text = "" Then
Hours = 0
Else
Hours = HoursField.Text
End If
Dim ContingencyField As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
'If ContingencyField.Text = "" Then
' Contingency = 0
'Else
' Contingency = Left(ContingencyField.Text, ContingencyField.Text.Length - 2)
'End If
Dim SellRateField As Label = CType(GridItem("SellRate").FindControl("lblSellRate"), Label)
If SellRateField.Text = "" Then
SellRate = 0
Else
SellRate = SellRateField.Text
End If
'Dim MarkupField As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
'If MarkupField.Text = "" Then
' Markup = 0
'Else
' Markup = Left(MarkupField.Text, MarkupField.Text.Length - 2)
'End If
Dim SourcesField As Label = CType(GridItem("SourcesID").FindControl("lblSourcesID"), Label)
If SourcesField.Text = "Freelance" Then
'It's a Freelancer
'Does CostStars = **** or Numbers
Dim CostStars As Label = CType(GridItem("Cost").FindControl("lblCostStars"), Label)
If CostStars.Text = "****" Then
'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
ElseIf CostStars.Text = "" Then
'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
GridItem.FindControl("lblCost").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
ElseIf ViewState.Item("HideCosts") = True Then
'It's Internal, but Profile says Hide Costs
GridItem.FindControl("lblCost").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'It's Internal - Profile says Show Costs
GridItem.FindControl("lblCost").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
'Recalculate Totals for Row
'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
'Dim SubTotal As Double = TotalHours * SellRate
'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
'Dim SubTotalWithoutCont As Double = Hours * SellRate
Dim Total As Double = Round(Hours * SellRate, 0)
'Assign values for Row
'Dim TotalHoursField As Label = CType(GridItem("TotalHours").FindControl("lblTotalHours"), Label)
'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
'Dim SubTotalField As Label = CType(GridItem("SubTotal").FindControl("lblSubTotal"), Label)
'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
Dim TotalField As Label = CType(GridItem("Total").FindControl("lblTotal"), Label)
TotalField.Text = String.Format("{0:C0}", Total)
'Find values for grid
GridTotalHours = Round(GridTotalHours + Hours, 0)
'GridTotalHoursWithCont = GridTotalHoursWithCont + TotalHours
'GridSubTotal = GridSubTotal + SubTotal
GridTotal = Round(GridTotal + Total, 0)
'GridSubTotalWithoutCont = GridSubTotalWithoutCont + SubTotalWithoutCont
ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
'This happens when a Row goes into Edit mode
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
Dim SourcesField As DropDownList = CType(GridItem("SourcesID").FindControl("SourcesID"), DropDownList)
Dim SourcesID As String = SourcesField.SelectedValue
'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
HideCostsTextBoxes(SourcesID, GridItem)
Dim HoursField As RadNumericTextBox = CType(GridItem("Hours").FindControl("Hours"), RadNumericTextBox)
CalculateRowTotalsFees(HoursField)
ElseIf (TypeOf e.Item Is GridFooterItem) Then
'Populates Footer Totals
Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
footerItem("Hours").Text = String.Format("{0:N0}", Round(GridTotalHours, 0))
footerItem("Hours").HorizontalAlign = HorizontalAlign.Right
'footerItem("TotalHours").Text = String.Format("{0:N0}", Round(GridTotalHoursWithCont, 0))
'footerItem("TotalHours").HorizontalAlign = HorizontalAlign.Right
'footerItem("SubTotal").Text = String.Format("{0:C0}", GridSubTotal)
'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
footerItem("SellRate").Controls.Add(New LiteralControl("Total: <br/>"))
'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
footerItem("SellRate").HorizontalAlign = HorizontalAlign.Right
footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridTotal) & " <br/>"))
'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridSubTotal - GridSubTotalWithoutCont)))
footerItem("Total").HorizontalAlign = HorizontalAlign.Right
End If
End Sub
Protected Sub FeesRoleID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
'Recalculate Rates
RecalculateRates(sender)
End Sub
Protected Sub FeesCostCenterID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
'Recalculate Rates
RecalculateRates(sender)
End Sub
Protected Sub FeesSourcesID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim Source As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(Source.NamingContainer, GridDataItem)
Dim SourcesID As String = Source.SelectedValue
'Recalculate Rates
RecalculateRates(sender)
'Hide Costs, depending on Cost Center Profile and Freelancer/Internal
HideCostsTextBoxes(SourcesID, gridItem)
End Sub
Protected Sub FeesHours_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesContingency_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesMarkup_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsFees(sender)
End Sub
Protected Sub FeesCostStars_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
'If the user changed the STars to a number, move that number into Cost so that it gets saved to the table
Dim CostStarsField As RadTextBox = CType(sender, RadTextBox)
Dim gridItem As GridDataItem = CType(CostStarsField.NamingContainer, GridDataItem)
Dim CostStars As String = CostStarsField.Text
Dim CostField As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
CostField.Text = CostStars
End Sub
Protected Sub CalculateRowTotalsFees(ByVal sender As Object)
Dim Hours As String
'Dim Contingency As String
Dim SellRate As String
'Dim Markup As String
Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
'Get values for row
Dim HoursField As RadNumericTextBox = CType(gridItem("Hours").FindControl("Hours"), RadNumericTextBox)
If HoursField.Text = "" Then
Hours = 0
Else
Hours = HoursField.Text
End If
'Dim ContingencyField As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'If ContingencyField.Text = "" Then
' Contingency = 0
'Else
' Contingency = ContingencyField.Text
'End If
Dim SellRateField As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
If SellRateField.Text = "" Then
SellRate = 0
Else
SellRate = SellRateField.Text
End If
'Dim MarkupField As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'If MarkupField.Text = "" Then
' Markup = 0
'Else
' Markup = MarkupField.Text
'End If
'Recalculate Totals for Row
'Dim TotalHours As Double = Hours + (Hours * (Contingency / 100))
'Dim SubTotal As Double = TotalHours * SellRate
'Dim Total As Double = SubTotal + SubTotal * (Markup / 100)
Dim Total As Double = round(Hours * SellRate, 0)
'Assign values for Row
'Dim TotalHoursField As Label = CType(gridItem("TotalHours").FindControl("lblTotalHours"), Label)
'TotalHoursField.Text = String.Format("{0:N0}", Round(TotalHours, 0))
'Dim SubTotalField As Label = CType(gridItem("SubTotal").FindControl("lblSubTotal"), Label)
'SubTotalField.Text = String.Format("{0:C0}", Round(SubTotal, 0))
Dim TotalField As Label = CType(gridItem("Total").FindControl("lblTotal"), Label)
TotalField.Text = String.Format("{0:C0}", Total)
End Sub
Protected Sub CalculateTotals()
If ViewState.Item("BudReqID") <> "" Then
'Only do this is there's a BudReqID
Dim dt0 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestDoesDataExist(ViewState.Item("BudReqID"))
If dt0.Rows.Count > 0 Then
Dim dt As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFees(ViewState.Item("BudReqID"))
Dim TotalFees As Integer = dt.Rows(0).Item(0)
Me.lblFeesTotal.Text = String.Format("{0:C0}", Round(TotalFees, 0))
Dim dt2 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalCosts(ViewState.Item("BudReqID"))
Dim TotalCosts As Integer = dt2.Rows(0).Item(0)
Me.lblCostsTotal.Text = String.Format("{0:C0}", Round(TotalCosts, 0))
Dim dt3 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnTotalFreelance(ViewState.Item("BudReqID"))
Dim TotalFreelance As Integer = dt3.Rows(0).Item(0)
Me.lblTotalFreelanceFees.Text = String.Format("{0:C0}", Round(TotalFreelance, 0))
Dim dt4 As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXProjectRequestReturnThirdPartyCosts(ViewState.Item("BudReqID"))
Dim TotalThirdParty As Integer = dt4.Rows(0).Item(0)
Me.lblThirdParty.Text = String.Format("{0:C0}", Round(TotalThirdParty, 0))
Me.lblThirdPartyRev.Text = String.Format("{0:P0}", TotalThirdParty / Me.numRevenue.Text)
Me.lblCostsExceed.Text = String.Format("{0:C0}", Round(ViewState.Item("ExceedPercentage") * TotalThirdParty, 0))
End If
End If
End Sub
Protected Sub RecalculateRates(ByVal sender As Object)
'This will recalculate the Rates when various fields change
Dim AnyField As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
Dim SourcesIDField As DropDownList = CType(gridItem("SourcesID").FindControl("SourcesID"), DropDownList)
Dim SourcesID As String = SourcesIDField.SelectedValue
Dim RoleIDField As DropDownList = CType(gridItem("RoleID").FindControl("RoleID"), DropDownList)
Dim RoleID As String = RoleIDField.SelectedValue
Dim ResourceIDField As RadTextBox = CType(gridItem("Resource").FindControl("Resource"), RadTextBox)
Dim ResourceID As String = ResourceIDField.Text
Dim CCIDField As DropDownList = CType(gridItem("CostCenterID").FindControl("CostCenterID"), DropDownList)
Dim CCID As String = CCIDField.SelectedValue
Dim CostCCID As String = ""
Dim SellCCID As String = ""
If CCID <> "" Then
'If there's a CCID, need to find the real CCID to pass to Solomon table, to calculate Cost
Dim Costobj As New PBBRL.EntityClass.xCostCenterProfiles
Costobj.FetchUsingPK(CCID)
CostCCID = Costobj.CostCenterId
End If
'Need to find the real CCID to pass to Solomon table, to calculate Sell Rate
Dim obj As New PBBRL.EntityClass.xCostCenterProfiles
obj.FetchUsingPK(ViewState.Item("CostCenterID"))
SellCCID = obj.CostCenterId
'Recalculate Rates
If SourcesID = "1" Then
'It's Internal
Dim FeeRate As Double
Dim CostRate As Double
FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
'CostRate = CType(CalculateRates(ViewState.Item("RateCardID"), "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
'Costs will now be calculated from one Rate Card for all Projects
CostRate = CType(CalculateRates("STD", "CR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", CostCCID, ""), Double)
Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
SellRate.Text = FeeRate
Dim Cost As RadNumericTextBox = CType(gridItem("Cost").FindControl("Cost"), RadNumericTextBox)
Cost.Text = CostRate
Else
'It's Freelance, only recalculate the Sell
Dim FeeRate As Double
FeeRate = CType(CalculateRates(ViewState.Item("RateCardID"), "BR", ViewState.Item("EffectiveDate"), RoleID, ResourceID, "", ViewState.Item("CostCenterID"), ""), Double)
Dim SellRate As Label = CType(gridItem("SellRate").FindControl("lblSellRate"), Label)
SellRate.Text = FeeRate
End If
End Sub
Protected Sub HideCostsTextBoxes(ByVal SourcesID As String, ByVal GridItem As GridDataItem)
If SourcesID = "4" Then
'It's a Freelancer
'Does CostStars = **** or Numbers
Dim CostStars As RadTextBox = CType(GridItem("Cost").FindControl("CostStars"), RadTextBox)
If CostStars.Text = "****" Then
'CostStars = ****, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
ElseIf CostStars.Text = "" Then
'CostStars = "", so nothing has been done, so show txtStars (means user has not altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
CType(GridItem.FindControl("CostStars"), RadTextBox).Text = "****"
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
Else
'CostStars <> ****, so show txtCost (means user has altered the Cost from Default)
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = True
GridItem.FindControl("lblCostStars").Visible = False
End If
ElseIf ViewState.Item("HideCosts") = True Then
'It's Internal, but Profile says Hide Costs
GridItem.FindControl("Cost").Visible = False
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = True
Else
'It's Internal - Profile says Show Costs
GridItem.FindControl("Cost").Visible = True
GridItem.FindControl("CostStars").Visible = False
GridItem.FindControl("lblCostStars").Visible = False
End If
End Sub
Protected Sub GridCosts_InsertCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.InsertCommand
If TypeOf e.Item Is GridEditableItem Then
'This adds the value of the SubActivity to the SDS
Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
Dim SubActivityID As String = SubActivityDDL.SelectedValue
SDSCostColumns.InsertParameters.Add("SubActvID", TypeCode.String, "")
SDSCostColumns.InsertParameters("SubActvID").DefaultValue = SubActivityID
End If
End Sub
Protected Sub GridCosts_ItemCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.ItemCommand
If (e.CommandName = RadGrid.InitInsertCommandName) Then
'This will set teh default value of the IncludeSell Check box
e.Canceled = True
'Prepare an IDictionary with the predefined values
Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary()
'set initial checked state for the checkbox on init insert
newValues("IncludeSell") = True
'Insert the item and rebind
e.Item.OwnerTableView.InsertItem(newValues)
End If
End Sub
Protected Sub GridCosts_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles GridCosts.ItemDataBound
If (TypeOf e.Item Is GridDataInsertItem AndAlso e.Item.IsInEditMode) Then
'This happens when a row goes into Insert mode
'Dim GridItem As GridDataInsertItem = CType(e.Item, GridDataInsertItem)
'Dim MarkupText As RadNumericTextBox = CType(GridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'MarkupText.Text = ViewState.Item("CostMarkup")
'Dim ContingencyText As RadNumericTextBox = CType(GridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'ContingencyText.Text = ViewState.Item("CostContingency")
ElseIf (TypeOf e.Item Is GridDataItem) And e.Item.IsInEditMode = False Then
'This happens everytime a row is bound (refresh, etc)
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
'Get values for the row
Dim Qty As Integer
Dim CostRate As Double
'Dim Contingency, Markup As Double
'Dim SubTotalNoCont, SubTotal
Dim Total As Integer
Dim QtyField As Label = CType(GridItem("Qty").FindControl("lblQty"), Label)
If QtyField.Text = "" Then
Qty = 0
Else
Qty = QtyField.Text
End If
Dim CostRateText As Label = CType(GridItem("CostRate").FindControl("lblCostRate"), Label)
If CostRateText.Text = "" Then
CostRate = 0
Else
CostRate = CostRateText.Text
End If
'Dim ContingencyText As Label = CType(GridItem("Contingency").FindControl("lblContingency"), Label)
'If ContingencyText.Text = "" Then
' Contingency = 0
'Else
' Contingency = Left(ContingencyText.Text, ContingencyText.Text.Length - 2)
'End If
'Dim MarkupText As Label = CType(GridItem("Markup").FindControl("lblMarkup"), Label)
'If MarkupText.Text = "" Then
' Markup = 0
'Else
' Markup = Left(MarkupText.Text, MarkupText.Text.Length - 2)
'End If
'Find values for this row
'SubTotalNoCont = Qty * CostRate
'SubTotal = SubTotalNoCont + (SubTotalNoCont * (Contingency / 100))
Total = Round(CostRate * Qty, 0)
'Find values for grid
'GridCostsSubTotal = GridCostsSubTotal + SubTotal
GridCOstsTotal = GridCOstsTotal + Total
'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont
'Populate row totals
CType(GridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
ElseIf (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
'This happens when a Row goes into Edit mode
Dim GridItem As GridDataItem = CType(e.Item, GridDataItem)
'Populate the SubActivity choices
Dim ActivityField As DropDownList = CType(GridItem("ActvID").FindControl("ActvID"), DropDownList)
Dim ActivityID As String = ActivityField.SelectedValue
Dim ActivityName As String = ActivityField.SelectedItem.Text
If ActivityID = "" Then
Else
'Get SubActivity DataSource
Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
Dim SubActivityDDL As DropDownList = GridItem.FindControl("SubActvID")
If resultSet.Rows.Count = 0 Then
'There are NO SubActivities for this Activity
'Add the Activity as the SubActivity
NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
Else
'There are SubActivities for this Activity
'Update SubActivity List
SubActivityDDL.Items.Clear()
SubActivityDDL.AppendDataBoundItems = True
SubActivityDDL.Items.Add("- Select One -")
SubActivityDDL.DataTextField = "SubActvName"
SubActivityDDL.DataValueField = "SubActvID"
SubActivityDDL.DataSource = resultSet
End If
'Populate SubActivity
Dim BudgetNodeCostsID As Integer = GridItem.GetDataKeyValue("BgetNodeCostID")
Dim obj As New PBBRL.EntityClass.xBudgetNodeCosts
obj.FetchUsingPK(BudgetNodeCostsID)
If obj.SubActvId.HasValue Then
Dim SubActivity As Integer = obj.SubActvId
SubActivityDDL.SelectedValue = SubActivity
End If
SubActivityDDL.DataBind()
End If
'Calculate new Totals
Dim QtyField As RadNumericTextBox = CType(GridItem("Qty").FindControl("Qty"), RadNumericTextBox)
CalculateRowTotalsCosts(QtyField)
ElseIf (TypeOf e.Item Is GridFooterItem) Then
Dim footerItem As GridFooterItem = CType(e.Item, GridFooterItem)
'footerItem("SubTotal").Text = String.Format("{0:C0}", GridCostsSubTotal)
'footerItem("SubTotal").HorizontalAlign = HorizontalAlign.Right
footerItem("CostRate").Controls.Add(New LiteralControl("Total: <br/>"))
'footerItem("Markup").Controls.Add(New LiteralControl("Contingency Total:"))
footerItem("CostRate").HorizontalAlign = HorizontalAlign.Right
footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCOstsTotal) & " <br/>"))
'footerItem("Total").Controls.Add(New LiteralControl(String.Format("{0:C0}", GridCostsSubTotal - GridCOstsSubTotalNoCont)))
footerItem("Total").HorizontalAlign = HorizontalAlign.Right
End If
End Sub
Protected Sub GridCosts_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Handles GridCosts.UpdateCommand
If TypeOf e.Item Is GridEditableItem Then
'This adds the value of the SubActivity to the SDS
Dim editedItem As GridEditableItem = TryCast(e.Item, GridEditableItem)
Dim SubActivityDDL As DropDownList = TryCast(editedItem.FindControl("SubActvID"), DropDownList)
Dim SubActivityID As String = SubActivityDDL.SelectedValue
SDSCostColumns.UpdateParameters.Add("SubActvID", TypeCode.String, "")
SDSCostColumns.UpdateParameters("SubActvID").DefaultValue = SubActivityID
End If
End Sub
Protected Sub CostsQty_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsCostRate_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsContingency_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CostsMarkup_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
CalculateRowTotalsCosts(sender)
End Sub
Protected Sub CalculateRowTotalsCosts(ByVal sender As Object)
'Get values for the row
Dim QtyValue As Integer
Dim CostRateValue As Double
'Dim ContingencyValue, MarkupValue As Double
'Dim SubTotalNoCont, SubTotal As Integer
Dim Total As Integer
Dim AnyField As RadNumericTextBox = CType(sender, RadNumericTextBox)
Dim gridItem As GridDataItem = CType(AnyField.NamingContainer, GridDataItem)
Dim Qty As RadNumericTextBox = CType(gridItem("Qty").FindControl("Qty"), RadNumericTextBox)
If Qty.Text <> Nothing Then
QtyValue = Integer.Parse(Qty.Text)
End If
Dim CostRateText As RadNumericTextBox = CType(gridItem("CostRate").FindControl("CostRate"), RadNumericTextBox)
If CostRateText.Text <> Nothing Then
CostRateValue = Double.Parse(CostRateText.Text)
End If
'Dim ContingencyText As RadNumericTextBox = CType(gridItem("Contingency").FindControl("Contingency"), RadNumericTextBox)
'If ContingencyText.Text <> Nothing Then
' ContingencyValue = Double.Parse(ContingencyText.Text)
'End If
'Dim MarkupText As RadNumericTextBox = CType(gridItem("Markup").FindControl("Markup"), RadNumericTextBox)
'If MarkupText.Text <> Nothing Then
' MarkupValue = Double.Parse(MarkupText.Text)
'End If
'Find values for this row
'SubTotalNoCont = QtyValue * CostRateValue
'SubTotal = SubTotalNoCont + (SubTotalNoCont * (ContingencyValue / 100))
'Total = SubTotal + (SubTotal * (MarkupValue / 100))
Total = round(QtyValue * CostRateValue,0)
'Find values for grid
'GridCostsSubTotal = GridCostsSubTotal + SubTotal
GridCOstsTotal = GridCOstsTotal + Total
'GridCOstsSubTotalNoCont = GridCOstsSubTotalNoCont + SubTotalNoCont
'Populate row totals
CType(gridItem.FindControl("lblTotal"), Label).Text = String.Format("{0:C0}", Total)
'CType(GridItem.FindControl("lblSubTotal"), Label).Text = String.Format("{0:C0}", SubTotal)
End Sub
Protected Sub ddlCostCenterNames_SelectedIndexChanged(ByVal o As Object, ByVal e As Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs) Handles ddlCostCenterNames.SelectedIndexChanged
'When the CC is changed, check to see if this Cost Center hides the COsts int he Grid
'Get values from Cost Center
Dim CostCenterID As String = Me.ddlCostCenterNames.SelectedValue
Dim objCostCenter As New PBBRL.EntityClass.xCostCenterProfiles
objCostCenter.FetchUsingPK(CostCenterID)
ViewState.Add("CostCenterID", CostCenterID)
ViewState.Add("HideCosts", objCostCenter.HideCosts)
If objCostCenter.ProposalPercentage.HasValue Then
ViewState.Add("ExceedPercentage", objCostCenter.ProposalPercentage)
Dim Percentage As Decimal = ViewState.Item("ExceedPercentage") / 100
Me.lblExceed.Text = String.Format("{0:P0}", (Percentage), 0)
Else
ViewState.Add("ExceedPercentage", 0)
Me.lblExceed.Text = String.Format("{0:P0}", 0, 0)
End If
'Calculate Totals
CalculateTotals()
'Rebind Grid
Me.GridFees.Rebind()
End Sub
Protected Sub CostsActivityID_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim source As DropDownList = CType(sender, DropDownList)
Dim gridItem As GridDataItem = CType(source.NamingContainer, GridDataItem)
'Get Variables
Dim ActivityID As String = source.SelectedValue
Dim ActivityName As String = source.SelectedItem.Text
'Get SubActivity DataSource
Dim resultSet As DataTable = PBDAL.StoredProcedureCallerClasses.RetrievalProcedures.ProcXSubActivitiesLoadAllByCompanyIdisViewable(ViewState("CompanyID"), ActivityID)
Dim SubActivityDDL As DropDownList = gridItem.FindControl("SubActvID")
If resultSet.Rows.Count = 0 Then
'There are NO SubActivities for this Activity
NoSubActivities(SubActivityDDL, ActivityName, ActivityID)
Else
'There are SubActivities for this Activity
'Update SubActivity List
SubActivityDDL.Items.Clear()
SubActivityDDL.AppendDataBoundItems = True
SubActivityDDL.Items.Add("- Select One -")
SubActivityDDL.DataTextField = "SubActvName"
SubActivityDDL.DataValueField = "SubActvID"
SubActivityDDL.DataSource = resultSet
SubActivityDDL.DataBind()
End If
End Sub
Protected Sub lblDecline_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblDecline.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
Me.lblDecline.Visible = False
Else
Me.lblDecline.Visible = True
End If
End Sub
Protected Sub txtDeclineReason_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDeclineReason.PreRender
If Me.txtRequestStatus.Text = "" Or Me.txtRequestStatus.Text = "Draft" Or Me.txtRequestStatus.Text = "No Approval Needed" Or Me.txtRequestStatus.Text = "New" Then
Me.txtDeclineReason.Visible = False
Else
Me.txtDeclineReason.Visible = True
End If
End Sub
End Class
