or
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"gridResult"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"gridResult"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblGewerkt"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblZiek"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblMutatie"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtVakantie"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtZiek"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtOveruren"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtHoursheetsLocal"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"rdpDate"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"rdpDate"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"gridResult"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblGewerkt"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblZiek"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblMutatie"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtVakantie"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtZiek"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"txtOveruren"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblWeek"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblDag"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblBlocked"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"cmbProjects"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"gridResult"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<!-- /RadAjaxManager -->
<!-- daysheet !-->
<
table
width
=
"100%"
class
=
"ShowValueTable"
>
<
tr
>
<
td
class
=
"contents"
>
<
telerik:RadDatePicker
runat
=
"server"
ID
=
"rdpDate"
DateInput-DateFormat
=
"dd-MM-yyyy"
Culture
=
"nl-NL"
OnSelectedDateChanged
=
"rdpDate_SelectedDateChanged"
Enabled
=
"true"
>
<
DatePopupButton
runat
=
"server"
/>
<
Calendar
ID
=
"Calendar1"
runat
=
"server"
/>
<
DateInput
ID
=
"DateInput1"
runat
=
"server"
AutoPostBack
=
"true"
DateFormat
=
"dd-MM-yyyy"
DisplayDateFormat
=
"dd-MM-yyyy"
>
<
IncrementSettings
InterceptMouseWheel
=
"false"
/>
</
DateInput
>
</
telerik:RadDatePicker
>
<
asp:Label
runat
=
"server"
ID
=
"lblWeek"
/>
</
td
>
<
td
class
=
"label"
>
Vakantie:
</
td
>
<
td
class
=
"contents"
>
<
asp:LinkButton
runat
=
"server"
CausesValidation
=
"false"
ID
=
"txtVakantie"
OnClientClick
=
"openWindowMutation"
></
asp:LinkButton
>
</
td
>
<
td
class
=
"label"
>
Contract:
</
td
>
<
td
class
=
"contents"
>
<
asp:Label
runat
=
"server"
ID
=
"lblContract"
/>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"contents"
rowspan
=
"2"
style
=
"text-align: center; font-size: 14pt;"
>
<
asp:Label
runat
=
"server"
ID
=
"lblDag"
/>
<
asp:Label
runat
=
"server"
ID
=
"lblBlocked"
Font-Size
=
"10pt"
Style
=
"color: Red;"
/>
</
td
>
<
td
class
=
"label"
>
Ziek:
</
td
>
<
td
class
=
"contents"
>
<
asp:LinkButton
runat
=
"server"
CausesValidation
=
"false"
ID
=
"txtZiek"
OnClientClick
=
"openWindowMutation"
></
asp:LinkButton
>
</
td
>
<
td
class
=
"label"
>
Gewerkt:
</
td
>
<
td
class
=
"contents"
>
<
asp:Label
runat
=
"server"
ID
=
"lblGewerkt"
/>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"label"
>
Overuren:
</
td
>
<
td
class
=
"label"
>
<
asp:LinkButton
runat
=
"server"
CausesValidation
=
"false"
ID
=
"txtOveruren"
OnClientClick
=
"openWindowMutation"
></
asp:LinkButton
>
</
td
>
<
td
class
=
"label"
>
Mutatie:
</
td
>
<
td
class
=
"contents"
>
<
asp:Label
runat
=
"server"
ID
=
"lblMutatie"
/>
<
asp:Label
runat
=
"server"
ID
=
"lblMaxZiek"
Style
=
"display: none;"
/>
</
td
>
</
tr
>
</
table
>
<!-- /daysheet !-->
<
br
/>
<
br
/>
<!-- hoursheet !-->
<
telerik:RadGrid
runat
=
"server"
ID
=
"gridResult"
AutoGenerateColumns
=
"False"
OnItemDataBound
=
"gridResult_ItemDataBound"
OnUpdateCommand
=
"gridResult_UpdateCommand"
OnDeleteCommand
=
"gridResult_DeleteCommand"
OnInsertCommand
=
"gridResult_InsertCommand"
OnNeedDataSource
=
"gridResult_NeedDataSource"
OnItemCommand
=
"gridResult_ItemCommand"
EnableViewState
=
"true"
>
<
MasterTableView
TableLayout
=
"Fixed"
DataKeyNames
=
"OID"
EditMode
=
"InPlace"
CommandItemDisplay
=
"Top"
InsertItemDisplay
=
"Bottom"
NoMasterRecordsText
=
"Geen taken om weer te geven"
>
<
CommandItemSettings
AddNewRecordText
=
"Nieuwe taak toevoegen"
ShowRefreshButton
=
"false"
/>
<
SortExpressions
>
<
telerik:GridSortExpression
FieldName
=
"Starttijd"
SortOrder
=
"Ascending"
/>
</
SortExpressions
>
<
Columns
>
<
telerik:GridEditCommandColumn
ButtonType
=
"ImageButton"
UniqueName
=
"EditCommandColumn"
>
<
ItemStyle
CssClass
=
"MyImageButton"
VerticalAlign
=
"Top"
/>
<
HeaderStyle
Width
=
"5%"
></
HeaderStyle
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"OID"
DataField
=
"OID"
HeaderText
=
"OID"
Visible
=
"false"
/>
<
telerik:GridTemplateColumn
HeaderText
=
"Starttijd"
UniqueName
=
"Starttijd"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"10%"
ItemStyle-VerticalAlign
=
"Top"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblStartTijd"
Text='<%# bind("Starttijd") %>' runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadMaskedTextBox
runat
=
"server"
SelectionOnFocus
=
"SelectAll"
ID
=
"txtStarttijd"
Text='<%# bind("Starttijd") %>' Mask="<
0..23
>:<
0..59
>" Width="85%">
<
ClientEvents
OnBlur
=
"BlurStarttijd"
OnLoad
=
"InitStarttijd"
/>
</
telerik:RadMaskedTextBox
>
</
EditItemTemplate
>
<
InsertItemTemplate
>
<
telerik:RadMaskedTextBox
runat
=
"server"
SelectionOnFocus
=
"SelectAll"
ID
=
"txtStarttijd"
Text='<%# bind("TempStartTime") %>' Mask="<
0..23
>:<
0..59
>" Width="85%">
<
ClientEvents
OnBlur
=
"BlurStarttijd"
OnLoad
=
"InitStarttijd"
/>
</
telerik:RadMaskedTextBox
>
</
InsertItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Eindtijd"
UniqueName
=
"Eindtijd"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"10%"
ItemStyle-VerticalAlign
=
"Top"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblEindTijd"
Text='<%# bind("Eindtijd") %>' runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadMaskedTextBox
runat
=
"server"
ID
=
"txtEindtijd"
Text='<%# bind("Eindtijd") %>'
Mask="<
0..23
>:<
0..59
>" Width="85%">
<
ClientEvents
OnBlur
=
"BlurEindtijd"
OnLoad
=
"InitEindtijd"
/>
</
telerik:RadMaskedTextBox
>
<
asp:CustomValidator
ID
=
"CustomValidator1"
runat
=
"server"
ErrorMessage
=
"Starttijd mag niet plaatsvinden na eindtijd"
Text
=
"*"
ClientValidationFunction
=
"compareTime"
ControlToValidate
=
"txtEindtijd"
SetFocusOnError
=
"true"
></
asp:CustomValidator
>
<
asp:CustomValidator
ID
=
"CustomValidator2"
runat
=
"server"
ErrorMessage
=
"Er mag geen overlap plaatsvinden tussen een of meerdere ingevoerde taken"
Text
=
"*"
ClientValidationFunction
=
"checkForOverlap"
ControlToValidate
=
"txtEindtijd"
SetFocusOnError
=
"true"
></
asp:CustomValidator
>
</
EditItemTemplate
>
<
InsertItemTemplate
>
<
telerik:RadMaskedTextBox
runat
=
"server"
ID
=
"txtEindtijd"
Text='<%# bind("TempEndTime") %>'
Mask="<
0..23
>:<
0..59
>" Width="85%">
<
ClientEvents
OnBlur
=
"BlurEindtijd"
OnLoad
=
"InitEindtijd"
/>
</
telerik:RadMaskedTextBox
>
<
asp:CustomValidator
ID
=
"CustomValidator1"
runat
=
"server"
ErrorMessage
=
"Starttijd mag niet plaatsvinden na eindtijd"
Text
=
"*"
ClientValidationFunction
=
"compareTime"
ControlToValidate
=
"txtEindtijd"
SetFocusOnError
=
"true"
></
asp:CustomValidator
>
<
asp:CustomValidator
ID
=
"CustomValidator2"
runat
=
"server"
ErrorMessage
=
"Er mag geen overlap plaatsvinden tussen een of meerdere ingevoerde taken"
Text
=
"*"
ClientValidationFunction
=
"checkForOverlap"
ControlToValidate
=
"txtEindtijd"
SetFocusOnError
=
"true"
></
asp:CustomValidator
>
</
InsertItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridDropDownColumn
DropDownControlType
=
"RadComboBox"
></
telerik:GridDropDownColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Project"
UniqueName
=
"Project"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"25%"
ItemStyle-VerticalAlign
=
"Top"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblProject"
Text='<%# bind("ProjectNaam") %>' runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadComboBox
ID
=
"cmbProjects"
MarkFirstMatch
=
"true"
AllowCustomText
=
"true"
DataSource="<%# getProjects() %>" DataTextField="Naam" DataValueField="ProjectNumber"
runat="server" SelectedValue='<%# Eval("ProjectID") %>' OnDataBound="cmbProject_Edit_DataBound"
OnSelectedIndexChanged="cmbProject_SelectedIndexChanged" OnTextChanged="cmbProject_TextChanged"
AutoPostBack="true" CausesValidation="false" Width="75%" />
<
asp:RequiredFieldValidator
ID
=
"ProjectValidator2"
runat
=
"server"
ControlToValidate
=
"cmbProjects"
Text
=
"*"
ErrorMessage
=
"Project moet ingevuld worden"
SetFocusOnError
=
"true"
/>
</
EditItemTemplate
>
<
InsertItemTemplate
>
<
telerik:RadComboBox
ID
=
"cmbProjects"
MarkFirstMatch
=
"true"
AllowCustomText
=
"true"
DataSource="<%# getProjects() %>" DataTextField="Naam" DataValueField="ProjectNumber"
runat="server" SelectedValue='<%# Eval("ProjectID") %>' OnDataBound="cmbProject_Insert_DataBound"
OnSelectedIndexChanged="cmbProject_SelectedIndexChanged" OnTextChanged="cmbProject_TextChanged"
AutoPostBack="true" CausesValidation="false" Width="75%" />
<
asp:RequiredFieldValidator
ID
=
"ProjectValidator2"
runat
=
"server"
ControlToValidate
=
"cmbProjects"
Text
=
"*"
ErrorMessage
=
"Project moet ingevuld worden"
SetFocusOnError
=
"true"
/>
</
InsertItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Deelproject"
UniqueName
=
"Project"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"25%"
ItemStyle-VerticalAlign
=
"Top"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblSubProject"
Text='<%# bind("SubProjectNaam") %>' runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadComboBox
ID
=
"cmbSubProjects"
MarkFirstMatch
=
"true"
AllowCustomText
=
"true"
OnTextChanged
=
"cmbSubProject_TextChanged"
AutoPostBack
=
"true"
CausesValidation
=
"false"
runat
=
"server"
Width
=
"75%"
/>
<
asp:RequiredFieldValidator
ID
=
"SubProjectValidator2"
runat
=
"server"
ControlToValidate
=
"cmbSubProjects"
Text
=
"*"
ErrorMessage
=
"Subproject moet ingevuld worden"
/>
</
EditItemTemplate
>
<
InsertItemTemplate
>
<
telerik:RadComboBox
ID
=
"cmbSubProjects"
MarkFirstMatch
=
"true"
AllowCustomText
=
"true"
OnTextChanged
=
"cmbSubProject_TextChanged"
AutoPostBack
=
"true"
CausesValidation
=
"false"
runat
=
"server"
Width
=
"75%"
/>
<
asp:RequiredFieldValidator
ID
=
"SubProjectValidator2"
runat
=
"server"
ControlToValidate
=
"cmbSubProjects"
Text
=
"*"
ErrorMessage
=
"Subproject moet ingevuld worden"
/>
</
InsertItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridTemplateColumn
HeaderText
=
"Omschrijving"
UniqueName
=
"Omschrijving"
AllowFiltering
=
"false"
HeaderStyle-Width
=
"20%"
ItemStyle-VerticalAlign
=
"Top"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblOmschrijving"
Text='<%# bind("Omschrijving") %>' runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadTextBox
runat
=
"server"
ID
=
"txtOmschrijving"
Text='<%# bind("Omschrijving") %>'
TextMode="MultiLine" Width="80%" SelectionOnFocus="SelectAll" />
<
asp:RequiredFieldValidator
ID
=
"omschrijvingValidator"
runat
=
"server"
ControlToValidate
=
"txtOmschrijving"
Text
=
"*"
ErrorMessage
=
"Omschrijving moet ingevuld worden"
/>
</
EditItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridButtonColumn
ButtonType
=
"ImageButton"
CommandName
=
"Delete"
UniqueName
=
"DeleteCommandColumn"
ConfirmDialogType
=
"RadWindow"
ConfirmText
=
"Weet u zeker dat u deze taak wilt verwijderen?"
>
<
HeaderStyle
Width
=
"5%"
></
HeaderStyle
>
<
ItemStyle
CssClass
=
"MyImageButton"
VerticalAlign
=
"Top"
/>
</
telerik:GridButtonColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
<
telerik:GridMaskedColumnEditor
ID
=
"GridMaskedColumnEditor1"
runat
=
"server"
/>
<
telerik:GridTextBoxColumnEditor
ID
=
"GridTextBoxColumnEditor1"
runat
=
"server"
TextBoxMode
=
"MultiLine"
/>
<
telerik:GridDropDownListColumnEditor
ID
=
"GridDropDownListColumnEditor1"
runat
=
"server"
/>
<!-- /hoursheet -->
<!-- RadWindow -->
<
telerik:RadWindow
runat
=
"server"
ID
=
"windowMutation"
Width
=
"375"
Height
=
"375"
OnClientClose
=
"windowClose"
NavigateUrl
=
"AlgemeneUrenInvoer.aspx"
Title
=
"Algemene uren bewerken"
VisibleStatusbar
=
"false"
>
</
telerik:RadWindow
>
<!-- /RadWindow -->
<!-- hidden buttons (used to force save/add) -->
<
asp:Button
ID
=
"btnAdd"
runat
=
"server"
Style
=
"display: none"
CausesValidation
=
"false"
OnClick
=
"AddButton_Click"
/>
<
asp:Button
ID
=
"btnSave"
runat
=
"server"
Style
=
"display: none"
OnClick
=
"SaveButton_Click"
/>
<
asp:Button
ID
=
"btnSubmit"
Style
=
"display: none"
CausesValidation
=
"true"
runat
=
"server"
/>
<!-- / hidden buttons -->
<!-- hidden fields (used for validation) -->
<
asp:TextBox
runat
=
"server"
ID
=
"txtGewerktMin"
Style
=
"display: none"
></
asp:TextBox
>
<
asp:TextBox
runat
=
"server"
ID
=
"txtZiekteMin"
Style
=
"display: none"
></
asp:TextBox
>
<
asp:TextBox
runat
=
"server"
ID
=
"txtHoursheetsLocal"
Style
=
"display: none"
></
asp:TextBox
>
<
input
type
=
"hidden"
id
=
"txtStart"
/>
<
input
type
=
"hidden"
id
=
"txtEind"
/>
<!-- / hidden fields -->
<!-- ValidationSummary -->
<
asp:ValidationSummary
runat
=
"server"
ID
=
"vsum"
ShowSummary
=
"false"
ShowMessageBox
=
"true"
HeaderText
=
"Opslaan is mislukt door de volgende fouten:"
></
asp:ValidationSummary
>
<!-- / ValidationSummary -->
using
System;
using
System.Linq;
using
System.Collections.Generic;
using
UrenCockpit.Business;
using
UrenCockpit.Process;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web;
using
System.Drawing;
using
Telerik.Web.UI;
using
UrenCockpit.Model;
using
System.Collections.Specialized;
using
System.Web.Script.Serialization;
namespace
UrenCockpit.View.Hours
{
public
partial
class
UrenInvoer2 : PageExtender
{
private
DateTime _date;
private
User _user;
private
const
string
controlOID =
"OID"
;
private
const
string
controlProject =
"cmbProjects"
;
private
const
string
controlSubProjects =
"cmbSubProjects"
;
private
const
string
controlOmschrijving =
"txtOmschrijving"
;
private
const
string
controlStarttijd =
"txtStarttijd"
;
private
const
string
controlEindtijd =
"txtEindtijd"
;
private
const
string
fieldStarttijd =
"Starttijd"
;
private
const
string
fieldEindtijd =
"Eindtijd"
;
private
const
string
fieldTempStarttijd =
"TempStartTime"
;
private
const
string
fieldTempEindtijd =
"TempEndTime"
;
private
const
string
fieldOmschrijving =
"Omschrijving"
;
private
const
string
fieldSubproject =
"Subproject"
;
private
const
string
fieldProject =
"ProjectID"
;
private
const
string
commandEdit =
"EditCommandColumn"
;
private
const
string
commandDelete =
"DeleteCommandColumn"
;
private
const
string
commandInsert =
"InitInsertButton"
;
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(rdpDate.SelectedDate ==
null
)
{
if
(Session[
"selectedDate"
] !=
null
)
{
rdpDate.SelectedDate = (DateTime)Session[
"selectedDate"
];
}
else
{
rdpDate.SelectedDate = DateTime.Now;
}
}
_date = rdpDate.SelectedDate.Value;
_user = UserInfo.instance.User;
if
(!IsPostBack)
{
initForm();
InitialiseDaysheet();
}
txtZiek.Attributes.Add(
"onclick"
,
"openWindowMutation()"
);
txtVakantie.Attributes.Add(
"onclick"
,
"openWindowMutation()"
);
txtOveruren.Attributes.Add(
"onclick"
,
"openWindowMutation()"
);
}
// Initialise the min and maxvalues for the datepicker control
private
void
initForm()
{
rdpDate.MaxDate = DateTime.Now;
if
(_user.pdx_employ_obj.InDienstSinds.HasValue)
{
rdpDate.MinDate = _user.pdx_employ_obj.InDienstSinds.Value;
}
else
{
rdpDate.MinDate = rdpDate.MaxDate;
}
Session[
"selectedDate"
] = rdpDate.SelectedDate.Value;
Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date);
txtGewerktMin.Text = Utility.minutesToHours(daysheet.NormaleMinuten - daysheet.GewerkteMinuten);
}
// (Re-)Initialise Daysheet section with values from database
private
void
InitialiseDaysheet()
{
Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date);
if
(daysheet !=
null
)
{
short
contract = daysheet.NormaleMinuten;
short
gewerkt = daysheet.GewerkteMinuten;
short
vakantie = daysheet.VakantieMinuten;
short
ziek = daysheet.ZiekteMinuten;
short
overwerk = daysheet.OverMinuten;
int
mutatie = (gewerkt + vakantie + ziek + overwerk) - contract;
SetDaySheetFields(contract, gewerkt, vakantie, ziek, overwerk, mutatie);
}
}
// Set the fields in the Daysheet section
private
void
SetDaySheetFields(
short
contract,
short
gewerkt,
short
vakantie,
short
ziek,
short
overwerk,
int
mutatie)
{
lblWeek.Text =
"Week: "
+ Utility.getWeekNumber(_date).ToString();
lblDag.Text = Utility.getWeekday(_date.DayOfWeek,
false
);
lblBlocked.Text = hoursConfirmed() ?
"<br>bevestigd"
:
""
;
lblContract.Text = Utility.minutesToHours(contract);
txtVakantie.Text = Utility.minutesToHours(vakantie);
txtZiek.Text = Utility.minutesToHours(ziek);
txtOveruren.Text = Utility.minutesToHours(overwerk);
lblGewerkt.Text = Utility.minutesToHours(gewerkt);
lblMutatie.ForeColor = (mutatie < 0) ? Color.Red : Color.Green;
lblMutatie.Text = Utility.minutesToHours(mutatie);
lblMaxZiek.Text = Utility.minutesToHours(contract - gewerkt);
}
// Update current Daysheet values with entered data
private
void
UpdateDaysheet()
{
Daysheet daysheet = Daysheet.getDaysheet(_user.pdx_employ_obj, _date);
short
totaalMinuten = CalculateTotalMinutesHoursheet();
daysheet.GewerkteMinuten = totaalMinuten;
daysheet.VakantieMinuten = (
short
)Utility.hourstringToMinutes(txtVakantie.Text);
daysheet.ZiekteMinuten = (
short
)Utility.hourstringToMinutes(txtZiek.Text);
daysheet.OverMinuten = (
short
)Utility.hourstringToMinutes(txtOveruren.Text);
txtGewerktMin.Text = Utility.minutesToHours(daysheet.NormaleMinuten - daysheet.GewerkteMinuten);
daysheet.Save();
InitialiseDaysheet();
}
// Calculate the total minutes value of all the hoursheet rows for this day
private
short
CalculateTotalMinutesHoursheet()
{
short
totaalMinuten = 0;
foreach
(Hoursheet hs
in
getHourDetails())
{
totaalMinuten += hs.Minuten;
}
return
totaalMinuten;
}
// Fill projects combobox and set selection if selected is provided
private
void
fillProjects(pdx_Subproject selected, RadComboBox rcbProjects)
{
rcbProjects.Items.Clear();
foreach
(pdx_Project project
in
getProjects())
{
RadComboBoxItem item =
new
RadComboBoxItem();
item.Value = project.ProjectNumber.ToString();
item.Text = project.Naam;
rcbProjects.Items.Add(item);
}
if
(selected !=
null
)
{
rcbProjects.SelectedValue = selected.pdx_Project.ProjectNumber.ToString();
}
}
// Fill projects combobox without setting a selection
private
void
fillProjects(RadComboBox rcbProjects)
{
fillProjects(
null
, rcbProjects);
}
// Fill subprojects combobox and set selection if selected is provided
private
void
fillSubProjects(pdx_Project proj, pdx_Subproject selected, RadComboBox comboBox)
{
IEnumerable<pdx_Subproject> subprojects = proj.pdx_Subprojects.Where(s => s.SubAfgesloten ==
false
);
comboBox.Items.Clear();
foreach
(pdx_Subproject subproject
in
subprojects)
{
RadComboBoxItem item =
new
RadComboBoxItem();
item.Value = subproject.SubNumber.ToString();
item.Text = subproject.SubNaam;
comboBox.Items.Add(item);
}
if
(selected !=
null
)
{
comboBox.SelectedValue = selected.SubNumber.ToString();
}
}
// Fill subprojects combobox based on the first project item for a user
private
void
fillSubProjects(RadComboBox comboBox)
{
IQueryable<pdx_Project> projects = getProjects();
fillSubProjects(projects.FirstOrDefault(),
null
, comboBox);
}
// Return the value of any item based by their fieldname
private
string
getGridItemValue(
string
fieldName, GridEditableItem dataItem)
{
if
(dataItem[fieldName].Controls.Count > 0)
{
Control control = dataItem[fieldName].Controls[0];
if
(control
is
TextBox)
return
((TextBox)control).Text;
else
if
(control
is
RadMaskedTextBox)
return
((RadMaskedTextBox)control).Text;
else
if
(control
is
RadComboBox)
return
((RadComboBox)control).SelectedValue;
else
return
""
;
}
else
{
return
dataItem[fieldName].Text;
}
}
// Call function to check for breaks and if there are any, add them to a collection
private
List<BreakSheet> checkForBreaks(IEnumerable<CustomHourSheet> hoursheets)
{
int
diff = 0;
List<BreakSheet> breaks =
new
List<BreakSheet>();
for
(
int
i = 1; i < hoursheets.Count(); i++)
{
string
starttijd = hoursheets.ElementAt(i).Starttijd;
string
eindtijdvorige = hoursheets.ElementAt(i - 1).Eindtijd;
DateTime dt1 =
new
DateTime(2011, 12, 31, Convert.ToInt32(eindtijdvorige.Substring(0, 2)), Convert.ToInt32(eindtijdvorige.Substring(3, 2)), 0);
DateTime dt2 =
new
DateTime(2011, 12, 31, Convert.ToInt32(starttijd.Substring(0, 2)), Convert.ToInt32(starttijd.Substring(3, 2)), 0);
diff = dt2.Subtract(dt1).Minutes;
if
(diff > 0)
{
BreakSheet breakSheet =
new
BreakSheet()
{
StartTijd = starttijd,
EindTijd = eindtijdvorige,
Duur = diff
};
breaks.Add(breakSheet);
}
}
if
(breaks.Count > 0)
{
return
breaks;
}
return
null
;
}
private
void
DisableEditDisplayForAllRows()
{
GridDataItemCollection items = gridResult.Items;
foreach
(GridEditableItem gi
in
items)
{
gi[commandDelete].Text =
""
;
gi[commandEdit].Text =
""
;
}
}
private
void
DisableEditDisplay(GridItemEventArgs e)
{
GridDataItem gridItem = (GridDataItem)e.Item;
gridItem[commandEdit].Text =
""
;
gridItem[commandDelete].Text =
""
;
}
#region Custom CRUD actions
private
void
DoDelete(GridEditableItem gridEditableItem)
{
Hoursheet hs = Hoursheet.Retrieve(getGridItemValue(controlOID, gridEditableItem));
hs.Delete();
UpdateDaysheet();
}
private
void
DoInsert(GridEditableItem gridEditableItem)
{
Hoursheet hs =
new
Hoursheet();
if
(AddOrUpdate(gridEditableItem, hs))
{
Hoursheet.Insert(hs,
null
);
UpdateDaysheet();
}
}
private
void
DoUpdate(GridEditableItem gridEditableItem)
{
Hoursheet hs = Hoursheet.Retrieve(getGridItemValue(controlOID, gridEditableItem));
if
(AddOrUpdate(gridEditableItem, hs))
{
hs.Save();
UpdateDaysheet();
}
}
private
bool
AddOrUpdate(GridEditableItem gridEditableItem, Hoursheet hs)
{
//Add correct date to ensure no default date is taken
bool
canSave;
string
date = rdpDate.SelectedDate.Value.ToString(
"yyyy-MM-dd"
);
RadMaskedTextBox starttijd = gridEditableItem.FindControl(controlStarttijd)
as
RadMaskedTextBox;
string
start = starttijd.TextWithPromptAndLiterals;
RadMaskedTextBox eindtijd = gridEditableItem.FindControl(controlEindtijd)
as
RadMaskedTextBox;
string
eind = eindtijd.TextWithPromptAndLiterals;
hs.Datum = rdpDate.SelectedDate.Value;
hs.Starttijd = DateTime.Parse(date +
" "
+ start);
hs.Eindtijd = DateTime.Parse(date +
" "
+ eind);
hs.PerNumber = _user.pdx_employ_obj.PerNumber;
TimeSpan diff = hs.Eindtijd - hs.Starttijd;
hs.Minuten = (
short
)diff.TotalMinutes;
RadComboBox cmbProjects = gridEditableItem.FindControl(controlProject)
as
RadComboBox;
RadComboBox cmbSubProjects = gridEditableItem.FindControl(controlSubProjects)
as
RadComboBox;
string
project = cmbProjects.SelectedValue;
string
subProject = cmbSubProjects.SelectedValue;
if
(subProject.IsNullOrEmpty())
{
hs.SubProject =
null
;
canSave =
false
;
}
else
{
hs.SubProject =
long
.Parse(subProject);
canSave =
true
;
}
RadTextBox omschrijving = gridEditableItem.FindControl(controlOmschrijving)
as
RadTextBox;
hs.Omschrijving = omschrijving.Text;
rdpDate.Enabled =
true
;
return
canSave;
}
#endregion
#region Custom Events
// Force "add new record" to show, this simulates pressing the "+" button
protected
void
AddButton_Click(
object
sender, EventArgs e)
{
ListDictionary newValues = generateEmptyRow();
gridResult.MasterTableView.InsertItem(newValues);
gridResult.MasterTableView.IsItemInserted =
true
;
gridResult.Rebind();
GridEditableItem gridItem = (GridEditableItem)gridResult.MasterTableView.GetInsertItem();
gridItem.FindControl(controlStarttijd).Focus();
rdpDate.Enabled =
false
;
}
// Generates an empty row that's used to fill with data for a new row later on
private
System.Collections.Specialized.ListDictionary generateEmptyRow()
{
System.Collections.Specialized.ListDictionary newValues =
new
System.Collections.Specialized.ListDictionary();
newValues[fieldStarttijd] =
string
.Empty;
newValues[fieldEindtijd] =
string
.Empty;
newValues[fieldTempStarttijd] = GetTimeForNewrow().ToString(
"HH:mm"
);
newValues[fieldTempEindtijd] = GetTimeForNewrow().AddMinutes(15).ToString(
"HH:mm"
);
newValues[fieldOmschrijving] =
string
.Empty;
newValues[fieldSubproject] =
string
.Empty;
newValues[fieldProject] =
string
.Empty;
return
newValues;
}
private
List<LocalHoursheet> generateLocalHoursheets(List<CustomHourSheet> hoursheets)
{
List<LocalHoursheet> returnValue =
new
List<LocalHoursheet>();
DateTime selected = rdpDate.SelectedDate.Value;
DateTime compare =
new
DateTime(selected.Year, selected.Month, selected.Day, 0, 0, 0);
foreach
(CustomHourSheet chs
in
hoursheets)
{
returnValue.Add(
new
LocalHoursheet()
{
DiffStartMinuten = (
int
)(chs.StartDatum - compare).TotalMinutes,
DiffEindMinuten = (
int
)(chs.EindDatum - compare).TotalMinutes,
});
}
return
returnValue;
}
// Add or update a new record, this simulates pressing the "✔" button
protected
void
SaveButton_Click(
object
sender, EventArgs e)
{
bool
saved =
false
;
GridEditableItem gridItem =
null
;
if
(gridResult.MasterTableView.IsItemInserted || gridResult.EditItems.Count > 0)
{
if
(gridResult.MasterTableView.IsItemInserted)
{
gridItem = (GridEditableItem)gridResult.MasterTableView.GetInsertItem();
DoInsert(gridItem);
saved =
true
;
}
else
{
gridItem = (GridEditableItem)gridResult.EditItems[0];
DoUpdate(gridItem);
saved =
true
;
}
}
if
(gridItem !=
null
&& saved)
{
gridItem.Edit =
false
;
gridResult.Rebind();
}
}
// Fill subprojects with no project selected (from insert mode)
protected
void
cmbProject_Insert_DataBound(
object
sender, EventArgs e)
{
GridEditableItem item = ((Control)sender).NamingContainer
as
GridEditableItem;
RadComboBox rcbProject = (RadComboBox)sender;
RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects);
if
(rcbProject.SelectedIndex > -1 && rcbProject.SelectedValue !=
""
)
{
pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue);
if
(project !=
null
)
{
fillSubProjects(project,
null
, rcbSubProjects);
rcbSubProjects.Focus();
}
}
}
// Fill subprojects with a project selected (from edit mode)
protected
void
cmbProject_Edit_DataBound(
object
sender, EventArgs e)
{
GridEditableItem item = ((Control)sender).NamingContainer
as
GridEditableItem;
RadComboBox rcbProject = (RadComboBox)sender;
RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects);
if
(rcbProject.SelectedIndex > -1 && rcbProject.SelectedValue !=
""
)
{
pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue);
CustomHourSheet hs = (CustomHourSheet)item.DataItem;
if
(project !=
null
&& hs.pdx_Subproject !=
null
)
{
fillSubProjects(project, hs.pdx_Subproject, rcbSubProjects);
rcbSubProjects.Focus();
}
}
}
protected
void
cmbProject_TextChanged(
object
sender, EventArgs e)
{
GridEditableItem item = ((Control)sender).NamingContainer
as
GridEditableItem;
RadComboBox rcbProject = (RadComboBox)sender;
RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects);
pdx_Project project =
null
;
// tegengaan van invoer van een niet bestaand project
if
(rcbProject.SelectedValue ==
""
)
{
rcbProject.SelectedIndex = 0;
}
project = pdx_Project.Retrieve(rcbProject.SelectedValue);
if
(project !=
null
)
{
fillSubProjects(project,
null
, rcbSubProjects);
rcbSubProjects.SelectedIndex = -1;
}
rcbSubProjects.Text =
""
;
rcbSubProjects.Focus();
}
protected
void
cmbProject_SelectedIndexChanged(
object
sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
GridEditableItem item = ((Control)sender).NamingContainer
as
GridEditableItem;
RadComboBox rcbProject = (RadComboBox)sender;
RadComboBox rcbSubProjects = (RadComboBox)item.FindControl(controlSubProjects);
if
(rcbProject.SelectedValue !=
""
)
{
pdx_Project project = pdx_Project.Retrieve(rcbProject.SelectedValue);
if
(project !=
null
)
{
fillSubProjects(project,
null
, rcbSubProjects);
rcbSubProjects.SelectedIndex = -1;
rcbSubProjects.Text =
""
;
rcbSubProjects.Focus();
}
}
}
protected
void
cmbSubProject_TextChanged(
object
sender, EventArgs e)
{
GridEditableItem item = ((Control)sender).NamingContainer
as
GridEditableItem;
RadComboBox rcbSubProject = (RadComboBox)sender;
RadTextBox txtOmschrijving = (RadTextBox)item.FindControl(controlOmschrijving);
// tegengaan van invoer van een niet bestaand project
if
(rcbSubProject.SelectedValue ==
""
)
{
rcbSubProject.SelectedIndex = 0;
}
txtOmschrijving.Focus();
}
protected
void
rdpDate_SelectedDateChanged(
object
sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
{
InitialiseDaysheet();
gridResult.Rebind();
rdpDate.Focus();
Session[
"selectedDate"
] = rdpDate.SelectedDate.Value;
}
#endregion
# region Data Access code
private
DateTime GetTimeForNewrow()
{
DateTime returnValue =
new
DateTime();
if
(getHourDetails().Count() > 0)
{
//If there already are hoursheets in the grid, determine new starttime based on max eindtijd
DateTime maxDateHS = getHourDetails().Where(h => h.Datum == rdpDate.SelectedDate.Value).Max(h => h.Eindtijd);
if
(maxDateHS !=
null
)
{
returnValue = maxDateHS;
}
// Else determine new starttime by workschedule
else
{
Werkrooster rooster = Werkrooster.getRoster(_user.pdx_employ_obj, _date);
int
dayOfWeek = (
int
)rdpDate.SelectedDate.Value.DayOfWeek;
DateTime maxDateWB = rooster.Werkbloks.Where(wb => wb.Weekdag == dayOfWeek).Max(wb => wb.Starttijd.GetValueOrDefault(rdpDate.SelectedDate.Value));
// If user has a werkblok, use this
if
(maxDateWB !=
null
)
{
returnValue = maxDateWB;
}
}
}
else
{
returnValue =
new
DateTime(2011, 12, 31, 9, 0, 0);
}
return
returnValue;
}
private
IEnumerable<Hoursheet> getHourDetails()
{
//Get all hoursheets for this user and date
return
Hoursheet.RetrieveAll()
.Where(h => h.PerNumber == _user.pdx_employ && h.Datum == _date)
.OrderBy(h => h.Starttijd);
}
protected
IQueryable<pdx_Project> getProjects()
{
IQueryable<pdx_Project> projects = pdx_Project.RetrieveAll()
.Where(p => p.Afgesloten !=
true
).OrderBy(p => p.Naam);
projects = projects.Where(p => p.ProjectEmployeeRoles.Any(r => r.Employ == _user.pdx_employ));
return
projects;
}
private
bool
hoursConfirmed()
{
return
(_user.UrenBevestigings_Obj !=
null
&& _user.UrenBevestigings_Obj.First().Datum.Value >= _date);
}
# endregion
#region RadGrid Events
protected
void
gridResult_NeedDataSource(
object
source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
IEnumerable<CustomHourSheet> hoursheets =
new
List<CustomHourSheet>();
hoursheets = from hs
in
getHourDetails()
select
new
CustomHourSheet
{
Datum = hs.Datum,
Eindtijd = hs.Eindtijd.ToString(
"HH:mm"
),
Minuten = hs.Minuten,
OID = hs.OID,
Omschrijving = hs.Omschrijving,
Starttijd = hs.Starttijd.ToString(
"HH:mm"
),
Subproject = hs.SubProject,
pdx_Subproject = hs.pdx_Subproject,
ProjectID = hs.pdx_Subproject.pdx_Project.ProjectNumber,
ProjectNaam = hs.pdx_Subproject !=
null
? hs.pdx_Subproject.pdx_Project.Naam :
""
,
SubProjectNaam = hs.pdx_Subproject !=
null
? hs.pdx_Subproject.SubNaam :
""
,
SubProjectID = hs.pdx_Subproject.SubNumber,
TempStartTime = GetTimeForNewrow().ToString(
"HH:mm"
),
TempEndTime = GetTimeForNewrow().AddMinutes(15).ToString(
"HH:mm"
),
StartDatum = hs.Starttijd,
EindDatum = hs.Eindtijd
};
List<CustomHourSheet> hsList = hoursheets.ToList();
if
(hoursheets.Count() > 1)
{
if
(checkForBreaks(hoursheets) !=
null
)
{
List<BreakSheet> breaksheets = checkForBreaks(hoursheets);
foreach
(BreakSheet bs
in
breaksheets)
{
hsList.Add(
new
CustomHourSheet()
{
Eindtijd = bs.StartTijd,
Starttijd = bs.EindTijd,
Minuten = bs.Duur,
});
}
}
}
gridResult.DataSource = hsList;
List<LocalHoursheet> hsLocal = generateLocalHoursheets(hsList);
string
json = GenerateJSONString(hsLocal);
txtHoursheetsLocal.Text = json;
}
private
static
string
GenerateJSONString(List<LocalHoursheet> hsLocal)
{
JavaScriptSerializer serializer =
new
JavaScriptSerializer();
string
json = serializer.Serialize(hsLocal);
return
json;
}
protected
void
gridResult_ItemDataBound(
object
sender, GridItemEventArgs e)
{
// Viewmode, data confirmed
bool
confirmed = hoursConfirmed();
if
(e.Item
is
GridDataItem && !e.Item.IsInEditMode && confirmed)
{
DisableEditDisplay(e);
}
// Editmode
else
if
(e.Item
is
GridEditableItem && e.Item.IsInEditMode)
{
RadMaskedTextBox start = e.Item.FindControl(controlStarttijd)
as
RadMaskedTextBox;
start.Focus();
//DisableEditDisplayForAllRows();
}
// Disable insert button on confirmed
if
(e.Item
is
GridCommandItem && confirmed)
{
e.Item.FindControl(commandInsert).Parent.Visible =
false
;
}
// Disable editdisplay for breaksheets
if
((e.Item
is
GridEditableItem && !e.Item.IsInEditMode))
{
// Disable editdisplay for breaksheets
CustomHourSheet hs = (CustomHourSheet)e.Item.DataItem;
if
(hs.Omschrijving ==
""
|| hs.Omschrijving ==
null
)
{
DisableEditDisplay(e);
}
// Disable editdisplay for when editmode is set
if
(Convert.ToInt32(Session[
"editMode"
]) == 1)
{
DisableEditDisplay(e);
}
}
}
protected
void
gridResult_ItemCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
if
(e.CommandName == RadGrid.InitInsertCommandName)
{
e.Canceled =
true
;
ListDictionary newValues = generateEmptyRow();
e.Item.OwnerTableView.InsertItem(newValues);
Session[
"editMode"
] = 1;
}
if
(e.CommandName == RadGrid.CancelCommandName || e.CommandName == RadGrid.PerformInsertCommandName || e.CommandName == RadGrid.UpdateCommandName || e.CommandName == RadGrid.UpdateEditedCommandName)
{
rdpDate.Enabled =
true
;
Session[
"editMode"
] = 0;
}
else
if
(e.CommandName == RadGrid.InitInsertCommandName || e.CommandName == RadGrid.EditCommandName)
{
rdpDate.Enabled =
false
;
Session[
"editMode"
] = 1;
}
}
// Event handler that handles UpdateCommand
protected
void
gridResult_UpdateCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
GridEditableItem gridEditableItem = (GridEditableItem)e.Item;
DoUpdate(gridEditableItem);
}
// Event handler that handles DeleteCommand
protected
void
gridResult_DeleteCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
GridEditableItem gridEditableItem = (GridEditableItem)e.Item;
DoDelete(gridEditableItem);
}
// Event handler that handles InsertCommand
protected
void
gridResult_InsertCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
GridEditableItem gridEditableItem = (GridEditableItem)e.Item;
DoInsert(gridEditableItem);
}
#endregion
}
}
Hi.
I have a grid with the nextPrevAndNumeric pager mode.
when i click on one of the page numbers - it works fine.
but when i click on the "prev/next/first/last page" nothing happens, no event is fired.
i went over the forums but didn't find an answer.
thanks in advance
<
telerik:GridBoundColumn
DataField
=
"Κωδικός Προϊόντος"
HeaderText
=
"Κωδικός Προϊόντος"
DataFormatString
=
"{0}"
DataType
=
"System.String"
SortExpression
=
"Κωδικός Προϊόντος"
UniqueName
=
"Κωδικός Προϊόντος"
>
<
HeaderStyle
Width
=
"155px"
></
HeaderStyle
>
</
telerik:GridBoundColumn
>