private static void GetCurrentAndPrevStateIdByTimeTrackingBlock(TimeTrackingBlock block, out int curStateId, out int prevStateId) { curStateId = -1; prevStateId = -1; StateMachineService stateMachine = block.GetService <StateMachineService>(); if (stateMachine == null || stateMachine.StateMachine.States.Count == 0 || stateMachine.CurrentState == null) { return; } EventService eventService = block.GetService <EventService>(); if (eventService != null) { // Detects that state is changed, find moFromStateName, toStateName MetaObject[] events = eventService.LoadEvents(TriggerContext.Current.TransactionId); StateMachineEventServiceArgs args = StateMachine.GetStateChangedEventArgs(events); if (args != null) { curStateId = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), args.CurrentState.Name).PrimaryKeyId.Value; prevStateId = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), args.PrevState.Name).PrimaryKeyId.Value; } } }
public static void UnRegisterFinances(TimeTrackingBlock block) { if (!Configuration.TimeTrackingModule) { throw new Mediachase.Ibn.LicenseRestrictionException(); } if (!(bool)block.Properties["AreFinancesRegistered"].Value) { throw new NotSupportedException("Finances are not registered."); } if (!TimeTrackingBlock.CheckUserRight(block, TimeTrackingManager.Right_UnRegFinances)) { throw new Mediachase.Ibn.AccessDeniedException(); } using (DbTransaction tran = DbTransaction.Begin()) { ActualFinances.DeleteByBlockId(block.PrimaryKeyId.Value); // O.R. [2008-07-29]: We don't need to check the "Write" right for Block using (SkipSecurityCheckScope scope = Mediachase.Ibn.Data.Services.Security.SkipSecurityCheck()) { block.Properties["AreFinancesRegistered"].Value = false; block.Save(); } // Recalculate TotalMinutes and TotalApproved RecalculateProjectAndObjects(block); tran.Commit(); } }
public void Invoke(object Sender, object Element) { if (Element is CommandParameters) { CommandParameters cp = (CommandParameters)Element; DateTime startDate = DateTime.Parse(cp.CommandArguments["primaryKeyId"], CultureInfo.InvariantCulture); TimeTrackingBlock[] mas = TimeTrackingBlock.List(FilterElement.EqualElement("OwnerId", Mediachase.IBN.Business.Security.CurrentUser.UserID), FilterElement.EqualElement("StartDate", startDate)); using (TransactionScope tran = DataContext.Current.BeginTransaction()) { foreach (TimeTrackingBlock ttb in mas) { StateMachineService sms = ((BusinessObject)ttb).GetService <StateMachineService>(); // process only initial state if (sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0) { StateTransition[] availableTransitions = sms.GetNextAvailableTransitions(true); if (availableTransitions.Length > 0) { sms.MakeTransition(availableTransitions[0].Uid); ttb.Save(); } } } tran.Commit(); } CHelper.RequireBindGrid(); } }
public static void RecalculateObject() { if (TriggerContext.Current == null) { throw new ArgumentException("TriggerContext.Current == null"); } TimeTrackingEntry entry = TriggerContext.Current.Parameter.MetaObject as TimeTrackingEntry; if (entry == null) { return; } TimeTrackingBlock block = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), entry.ParentBlockId); int projectId = GetProjectIdByTimeTrackingBlock(block); //TimeTracking.RecalculateObject(int? objectId, int? objectTypeId, int projectId) //надо вызывать при создании TimeTrackingEntry (с хотя бы одним ненулевым Day1, Day2..., Day7) //при изменении TimeTrackingEntry (когда изменился хотя бы один Day1, Day2..., Day7) и // при удалении TimeTrackingEntry (с хотя бы одним ненулевым Day1, Day2..., Day7) // Comment conition because can n't detects that all DayX set to zero if (TriggerContext.Current.Parameter.State == MetaObjectState.Created && (entry.Day1 != 0 || entry.Day2 != 0 || entry.Day3 != 0 || entry.Day4 != 0 || entry.Day5 != 0 || entry.Day6 != 0 || entry.Day7 != 0) || TriggerContext.Current.Parameter.State != MetaObjectState.Created) { RecalculateObjectAndProject(entry.Properties["ObjectId"].GetValue <int?>(), entry.Properties["ObjectTypeId"].GetValue <int?>(), projectId); } }
public void BindData(MetaField field) { string sReferencedClass = field.Attributes[McDataTypeAttribute.ReferenceMetaClassName].ToString(); ViewState["ReferencedClass"] = sReferencedClass; if (sReferencedClass == TimeTrackingEntry.GetAssignedMetaClass().Name || sReferencedClass == TimeTrackingBlock.GetAssignedMetaClass().Name || sReferencedClass == TimeTrackingBlockType.GetAssignedMetaClass().Name || sReferencedClass == TimeTrackingBlockTypeInstance.GetAssignedMetaClass().Name || sReferencedClass == Principal.GetAssignedMetaClass().Name || Mediachase.IBN.Business.Security.CurrentUser == null) { tblEntity.Visible = false; string url = ResolveClientUrl(String.Format("~/Apps/MetaUI/Pages/Public/SelectItem.aspx?class={0}&btn={1}", sReferencedClass, Page.ClientScript.GetPostBackEventReference(btnRefresh, "xxx"))); ibSelect.OnClientClick = String.Format("OpenPopUpWindow(\"{0}\", 640, 480, 1); return false;", url); } else { ReferenceUpdatePanel.Visible = false; refObjects.ObjectTypes = sReferencedClass; if (Request["ContainerFieldName"] != null && field.Name == Request["ContainerFieldName"] && Request["ContainerId"] != null) { this.Value = PrimaryKeyId.Parse(Request["ContainerId"]); } } }
/// <summary> /// Gets the week items for user. /// </summary> /// <param name="from">From.</param> /// <param name="to">To.</param> /// <param name="userId">The user id.</param> /// <returns></returns> public static WeekItemInfo[] GetWeekItemsForUser(DateTime from, DateTime to, int userId) { List <WeekItemInfo> retVal = new List <WeekItemInfo>(); // Load User TT blocks TimeTrackingBlock[] userBlocks = TimeTrackingBlock.List(FilterElement.EqualElement("OwnerId", userId), new IntervalFilterElement("StartDate", from, to)); // Sort Block By Start Date Array.Sort <TimeTrackingBlock>(userBlocks, CompareTimeTrackingBlockByStartDate); // Create Week Item Info list DateTime currentWeekStart = GetRealWeekStart(from); // TODO: Current while (currentWeekStart < to) { // Calculate aggregated status of all blocks WeekItemStatus status = CalculateWeekStatusByBlocks(currentWeekStart, userBlocks); WeekItemInfo item = new WeekItemInfo(currentWeekStart, Iso8601WeekNumber.GetWeekNumber(currentWeekStart.AddDays(3)), status); CalculateDayTotal(currentWeekStart, item, userBlocks); retVal.Add(item); // Go to next week currentWeekStart = currentWeekStart.AddDays(7); } return(retVal.ToArray()); }
public override bool CheckVisibility(object dataItem) { if (dataItem != null && dataItem is BusinessObject) { bool isVisible = false; if (dataItem is TimeTrackingBlock) { TimeTrackingBlock blk = (TimeTrackingBlock)dataItem; // New or old (4.1) Finance schema bool areFinancesNew = true; if (blk.ProjectId.HasValue) { areFinancesNew = ProjectSpreadSheet.IsActive(blk.ProjectId.Value); } if (areFinancesNew) { SecurityService ss = ((TimeTrackingBlock)dataItem).GetService <SecurityService>(); if (ss != null && ss.CheckUserRight(TimeTrackingManager.Right_ViewFinances)) { isVisible = true; } } } return(isVisible); } return(base.CheckVisibility(dataItem)); }
protected void Page_Load(object sender, EventArgs e) { if (BlockId <= 0) { throw new ArgumentException("BlockId is wrong or not specified"); } block = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), BlockId); // block = new TimeTrackingBlock(BlockId); SecurityService ss = block.GetService <SecurityService>(); if (ss == null || !ss.CheckUserRight(TimeTrackingManager.Right_RegFinances)) { throw new AccessDeniedException(); } btnApprove.Text = LocRM.GetString("tApprove"); btnCancel.Text = LocRM.GetString("tCancel"); if (!Page.IsPostBack) { BindAccounts(); dtcDate.SelectedDate = Mediachase.IBN.Business.User.GetLocalDate(DateTime.UtcNow).Date; } btnApprove.CustomImage = CHelper.GetAbsolutePath("/layouts/images/accept.gif"); btnCancel.CustomImage = CHelper.GetAbsolutePath("/layouts/images/cancel.gif"); }
private void BindStates() { ddState.Items.Add(new ListItem(CHelper.GetResFileString("{IbnFramework.Global:_mc_All}"), "0")); foreach (MetaObject mo in StateMachineManager.GetAvailableStates(TimeTrackingBlock.GetAssignedMetaClass())) { ddState.Items.Add(new ListItem(CHelper.GetResFileString(mo.Properties["FriendlyName"].Value.ToString()), mo.Properties["FriendlyName"].Value.ToString())); } }
public static void RegisterTriggers() { TriggerManager.AddTrigger(TimeTrackingBlock.GetAssignedMetaClass(), new Trigger("RecalculateProjectByTimeTrackingBlock", "Recalculates project fields by time tracking block", false, false, true, string.Empty, "RecalculateProject")); TriggerManager.AddTrigger(TimeTrackingEntry.GetAssignedMetaClass(), new Trigger("RecalculateObjectByTimeTrackingEntry", "Recalculates project fields by time tracking block", true, true, true, string.Empty, "RecalculateObject")); }
private void BindGrid() { EnsureSelectInstance(); if (BlockInstanceList.Items.Count > 0 && UserList.Items.Count > 0) { MainGrid.Visible = true; int instanceId = int.Parse(BlockInstanceList.SelectedValue, CultureInfo.InvariantCulture); int userId = int.Parse(UserList.SelectedValue, CultureInfo.InvariantCulture); DateTime startDate = DTCWeek.SelectedDate; //if (startDate == DateTime.MinValue) // startDate = CHelper.GetWeekStartByDate(DTCWeek.Value); if (instanceId > 0) { TimeTrackingBlock block = TimeTrackingManager.GetTimeTrackingBlock(instanceId, startDate, userId); if (block == null || Mediachase.Ibn.Data.Services.Security.CanWrite(block)) { MainGrid.DataSource = Mediachase.IBN.Business.TimeTracking.GetListTimeTrackingItemsForAdd_DataTable(instanceId, startDate, userId); MainGrid.DataBind(); } else { MainGrid.Visible = false; } } else // All Projects { BindAllProjectsGrid(startDate, userId); } } else { MainGrid.Visible = false; } foreach (DataGridItem dgi in MainGrid.Items) { if (dgi.Cells[1].Text == ProjectObjectType.ToString(CultureInfo.InvariantCulture)) { dgi.BackColor = Color.FromArgb(240, 240, 240); dgi.Font.Bold = true; // Add the OnClick handler CheckBox cb = (CheckBox)dgi.FindControl("chkElement"); if (cb != null) { cb.Attributes.Add("onclick", String.Format(CultureInfo.InvariantCulture, "CheckChildren(this, {0})", dgi.Cells[2].Text)); } } } }
/// <summary> /// Gets the min start date. /// </summary> /// <param name="userId">The user id.</param> /// <returns></returns> public static DateTime GetTimeTrackingBlockMinStartDate(int userId) { TimeTrackingBlock[] userBlocks = TimeTrackingBlock.List( new FilterElementCollection(FilterElement.EqualElement("OwnerId", userId)), new SortingElementCollection(SortingElement.Ascending("StartDate")), 0, 1); if (userBlocks.Length > 0) { return(userBlocks[0].StartDate); } return(DateTime.Now.AddDays(-210)); }
private void ApplyStartValues() { if (BlockId > 0) { TimeTrackingBlock block = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), BlockId); if (block != null) { blockInstanceId = block.BlockTypeInstanceId; } } BindNullValues(); }
/// <summary> /// Compares the time tracking block by start date. /// </summary> /// <param name="x">The x.</param> /// <param name="y">The y.</param> /// <returns></returns> private static int CompareTimeTrackingBlockByStartDate(TimeTrackingBlock x, TimeTrackingBlock y) { if (x == null) { throw new ArgumentNullException("x"); } if (y == null) { throw new ArgumentNullException("y"); } return(x.StartDate.CompareTo(y.StartDate)); }
/// <summary> /// Binds the data. /// </summary> private void BindData() { if (this.ClassName == TimeTrackingEntry.GetAssignedMetaClass().Name) { TimeTrackingEntry tte = MetaObjectActivator.CreateInstance <TimeTrackingEntry>(TimeTrackingEntry.GetAssignedMetaClass(), this.ObjectId); BindDayHeaders(tte.StartDate); BindTTEntry(tte); frmView.DataItem = tte; frmView.DataBind(); if (TimeTrackingBlock.CheckUserRight(tte.ParentBlockId, Security.RightWrite)) { TTBlock.Visible = false; TTEntry.Visible = true; ReadOnlyBlock.Visible = false; } else { TTBlock.Visible = false; TTEntry.Visible = false; ReadOnlyBlock.Visible = true; } } else if (this.ClassName == TimeTrackingBlock.GetAssignedMetaClass().Name) { TimeTrackingBlock ttb = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), this.ObjectId); frmViewBlock.DataItem = ttb; frmViewBlock.DataBind(); if (TimeTrackingBlock.CheckUserRight(ttb.PrimaryKeyId.Value, Security.RightWrite)) { TTBlock.Visible = true; TTEntry.Visible = false; ReadOnlyBlock.Visible = false; } else { TTBlock.Visible = false; TTEntry.Visible = false; ReadOnlyBlock.Visible = true; } } else { TTBlock.Visible = false; TTEntry.Visible = false; ReadOnlyBlock.Visible = true; } }
private void BindData() { if (BlockId > 0) { TimeTrackingBlock ttb = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), BlockId); StateMachineService sms = ttb.GetService <StateMachineService>(); StateTransition[] nextTransitions = sms.GetNextAvailableTransitions(); StateTransition[] prevTransitions = sms.GetPrevAvailableTransitions(); ttbTitle.Text = ttb.Title; TTBlockComment.Value = string.Empty; BindTransitions(nextTransitions, prevTransitions); } }
private static int GetFinalStateIdByTimeTrackingBlock(TimeTrackingBlock block) { StateMachineService stateMachine = block.GetService <StateMachineService>(); if (stateMachine == null || stateMachine.StateMachine.States.Count == 0) { return(-1); } State finalState = stateMachine.StateMachine.States[stateMachine.StateMachine.States.Count - 1]; MetaObject stateObject = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), finalState.Name); return(stateObject.PrimaryKeyId.Value); }
public static void RecalculateProject() { if (TriggerContext.Current == null) { throw new ArgumentException("TriggerContext.Current == null"); } TimeTrackingBlock block = TriggerContext.Current.Parameter.MetaObject as TimeTrackingBlock; if (block == null) { return; } RecalculateProjectAndObjects(block); }
/// <summary> /// Handles the Click event of the btnSaveBlock control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void btnSaveBlock_Click(object sender, EventArgs e) { using (TransactionScope tran = DataContext.Current.BeginTransaction()) { TimeTrackingBlock ttb = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), this.ObjectId); ProcessCollection(this.frmViewBlock.Controls, ttb); ttb.Save(); tran.Commit(); } CommandParameters cp = new CommandParameters("MC_TimeTracking_EditGridFrame"); Mediachase.Ibn.Web.UI.WebControls.CommandHandler.RegisterCloseOpenedFrameScript(this.Page, cp.ToString()); }
/// <summary> /// Recalculates the project and objects TotalMinutes and TotalApproved. /// </summary> /// <param name="block">The block.</param> private static void RecalculateProjectAndObjects(TimeTrackingBlock block) { int projectId = GetProjectIdByTimeTrackingBlock(block); if (projectId > 0) { TimeTrackingEntry[] entryList = TimeTrackingEntry.List( FilterElement.EqualElement("ParentBlockId", block.PrimaryKeyId.Value), FilterElement.IsNotNullElement("ObjectId"), FilterElement.IsNotNullElement("ObjectTypeId")); foreach (TimeTrackingEntry entry in entryList) { DbTimeTracking.RecalculateObject((int)entry.Properties["ObjectId"].Value, (int)entry.Properties["ObjectTypeId"].Value, block.ProjectId.Value); } DbTimeTracking.RecalculateProject(projectId); } }
private void ApplyStartValues() { if (BlockId > 0) { TimeTrackingBlock block = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), BlockId); if (block != null) { ownerId = block.OwnerId; startDate = block.StartDate; blockInstanceId = block.BlockTypeInstanceId; return; } } if (ViewName == "TT_MyGroupByWeekProject") // My { ownerId = Mediachase.Ibn.Data.Services.Security.CurrentUserId; } else { int filterUser = GetUserFromFilter(); if (filterUser > 0) { ownerId = filterUser; } } int filterInstance = GetInstanceFromFilter(); if (filterInstance > 0) { blockInstanceId = filterInstance; } DateTime filterDate = GetStartDateFromFilter(); if (filterDate != DateTime.MinValue) { startDate = filterDate; } }
public bool IsEnable(object Sender, object Element) { if (Element is CommandParameters) { CommandParameters cp = (CommandParameters)Element; if (!cp.CommandArguments.ContainsKey("parentBlockId")) { return(false); } TimeTrackingBlock ttb = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(MetaDataWrapper.ResolveMetaClassByNameOrCardName("TimeTrackingBlock"), Convert.ToInt32(cp.CommandArguments["parentBlockId"].ToString(), CultureInfo.InvariantCulture)); StateMachineService sms = ttb.GetService <StateMachineService>(); StateTransition[] transitions = sms.GetNextAvailableTransitions(true); bool isInitialState = sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0; return(transitions.Length > 0 && isInitialState); } return(false); }
public bool IsEnable(object Sender, object Element) { if (Element is CommandParameters) { CommandParameters cp = (CommandParameters)Element; if (!cp.CommandArguments.ContainsKey("parentBlockId")) { return(false); } MetaObject ttb = MetaObjectActivator.CreateInstance <BusinessObject>(MetaDataWrapper.ResolveMetaClassByNameOrCardName("TimeTrackingBlock"), Convert.ToInt32(cp.CommandArguments["parentBlockId"])); StateMachineService sms = ((BusinessObject)ttb).GetService <StateMachineService>(); bool canWrite = TimeTrackingBlock.CheckUserRight((Mediachase.IbnNext.TimeTracking.TimeTrackingBlock)ttb, Security.RightWrite); bool isInitialState = sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0; return(canWrite && isInitialState); } return(false); }
public static bool CanUpdate(DateTime startDate, int projectId) { bool retval = false; if (Configuration.TimeTrackingModule) { startDate = GetWeekStart(startDate); // O.R. [2008-07-25] TimeTrackingBlockTypeInstance inst = null; using (SkipSecurityCheckScope scope = Mediachase.Ibn.Data.Services.Security.SkipSecurityCheck()) { inst = TimeTrackingManager.GetBlockTypeInstanceByProject(projectId); } if (inst != null) { TimeTrackingBlock[] blocks = TimeTrackingBlock.List( FilterElement.EqualElement("OwnerId", Security.CurrentUser.UserID), FilterElement.EqualElement("BlockTypeInstanceId", inst.PrimaryKeyId.Value), FilterElement.EqualElement("StartDate", startDate) ); if (blocks.Length > 0) // Block exists { TimeTrackingBlock block = blocks[0]; SecurityService ss = block.GetService <SecurityService>(); retval = ss.CheckUserRight(TimeTrackingManager.Right_Write); } else // Block doesn't exist { SecurityService ss = inst.GetService <SecurityService>(); retval = ss.CheckUserRight(TimeTrackingManager.Right_AddMyTTBlock) || ss.CheckUserRight(TimeTrackingManager.Right_AddAnyTTBlock); } } } return(retval); }
public override bool CheckVisibility(object dataItem) { if (dataItem is MetaClass) { //hide list templates and timetracking classes (not entity objects) MetaClass mc = (MetaClass)dataItem; if (ListManager.MetaClassIsList(mc)) { ListInfo li = ListManager.GetListInfoByMetaClassName(mc.Name); if (li != null && li.IsTemplate) { return(false); } } else if (mc.Name == TimeTrackingEntry.GetAssignedMetaClass().Name || mc.Name == TimeTrackingBlock.GetAssignedMetaClass().Name || mc.Name == TimeTrackingBlockType.GetAssignedMetaClass().Name || mc.Name == TimeTrackingBlockTypeInstance.GetAssignedMetaClass().Name) { return(false); } } return(base.CheckVisibility(dataItem)); }
private void BindUsers() { string savedValue; if (!IsPostBack) { savedValue = Mediachase.IBN.Business.Security.CurrentUser.UserID.ToString(); } else { savedValue = UserList.SelectedValue; } UserList.Items.Clear(); if (ProjectList.SelectedValue == null || startDate == DateTime.MinValue) { return; } int blockTypeInstanceId = int.Parse(ProjectList.SelectedValue, CultureInfo.InvariantCulture); TimeTrackingBlockTypeInstance inst = MetaObjectActivator.CreateInstance <TimeTrackingBlockTypeInstance>(TimeTrackingBlockTypeInstance.GetAssignedMetaClass(), blockTypeInstanceId); int userFromFilter = GetUserFromFilter(); if (userFromFilter > 0) { if (Mediachase.Ibn.Data.Services.Security.CheckObjectRight(inst, TimeTrackingManager.Right_AddAnyTTBlock) || (Mediachase.Ibn.Data.Services.Security.CheckObjectRight(inst, TimeTrackingManager.Right_AddMyTTBlock) && userFromFilter == Mediachase.Ibn.Data.Services.Security.CurrentUserId)) { TimeTrackingBlock block = TimeTrackingManager.GetTimeTrackingBlock(blockTypeInstanceId, startDate, userFromFilter); if (block == null || Mediachase.Ibn.Data.Services.Security.CanWrite(block)) { Principal pl = MetaObjectActivator.CreateInstance <Principal>(Principal.GetAssignedMetaClass(), userFromFilter); if (pl != null) { UserList.Items.Add(new ListItem(pl.Name, userFromFilter.ToString())); } } } } else // all users { if (Mediachase.Ibn.Data.Services.Security.CheckObjectRight(inst, TimeTrackingManager.Right_AddAnyTTBlock)) { #region 1. Make the Dictionary of Principal Dictionary <int, string> allUsers = new Dictionary <int, string>(); Principal[] principals = Principal.List(new FilterElementCollection(FilterElement.EqualElement("Card", "User"), FilterElement.EqualElement("Activity", 3)), new SortingElementCollection(new SortingElement("Name", SortingElementType.Asc))); foreach (Principal p in principals) { allUsers.Add(p.PrimaryKeyId.Value, p.Name); } #endregion #region 2. Make the list of the Id (to pass it as array) and the Dictionary of TimeTrackingBlock List <int> idList = new List <int>(); Dictionary <int, TimeTrackingBlock> allblocks = new Dictionary <int, TimeTrackingBlock>(); TimeTrackingBlock[] blocks = TimeTrackingBlock.List(FilterElement.EqualElement("StartDate", startDate), FilterElement.EqualElement("BlockTypeInstanceId", blockTypeInstanceId)); foreach (TimeTrackingBlock block in blocks) { idList.Add(block.PrimaryKeyId.Value); allblocks.Add(block.PrimaryKeyId.Value, block); } #endregion #region 3. Get the list of the existing blocks with rights and remove the forbidden items from allUsers SerializableDictionary <int, Collection <string> > objectRights = Mediachase.Ibn.Data.Services.Security.GetAllowedRights(TimeTrackingBlock.GetAssignedMetaClass(), idList.ToArray()); foreach (KeyValuePair <int, Collection <string> > item in objectRights) { int id = item.Key; Collection <string> allowedRights = item.Value; TimeTrackingBlock block = allblocks[id]; int ownerId = block.OwnerId; if (!allowedRights.Contains(Mediachase.Ibn.Data.Services.Security.RightWrite)) { allUsers.Remove(ownerId); } } #endregion #region 4. Fill in the dropdown foreach (KeyValuePair <int, string> item in allUsers) { UserList.Items.Add(new ListItem(item.Value, item.Key.ToString())); } #endregion } else if (Mediachase.Ibn.Data.Services.Security.CheckObjectRight(inst, TimeTrackingManager.Right_AddMyTTBlock)) { // eliminate the block for which we don't have the "Write" right TimeTrackingBlock block = TimeTrackingManager.GetTimeTrackingBlock(blockTypeInstanceId, startDate, Mediachase.Ibn.Data.Services.Security.CurrentUserId); if (block == null || Mediachase.Ibn.Data.Services.Security.CanWrite(block)) { Principal pl = MetaObjectActivator.CreateInstance <Principal>(Principal.GetAssignedMetaClass().Name, Mediachase.Ibn.Data.Services.Security.CurrentUserId); UserList.Items.Add(new ListItem(pl.Name, Mediachase.Ibn.Data.Services.Security.CurrentUserId.ToString())); } } } if (savedValue != null) { CHelper.SafeSelect(UserList, savedValue); } }
private static int GetProjectIdByTimeTrackingBlock(TimeTrackingBlock block) { return(block.Properties["ProjectId"].Value != null ? (int)(PrimaryKeyId)block.Properties["ProjectId"].Value : -1); //TimeTrackingBlockTypeInstance instance = new TimeTrackingBlockTypeInstance(block.BlockTypeInstanceId); //return base.Properties["ProjectId"].Value != null ? (int)base.Properties["ProjectId"].Value : -1; }
private void BindUsersByBlockTypeInstance(int blockTypeInstanceId) { string savedValue; if (!IsPostBack) { savedValue = Mediachase.IBN.Business.Security.CurrentUser.UserID.ToString(); } else { savedValue = UserList.SelectedValue; } DateTime startDate = DTCWeek.SelectedDate; //if (startDate == DateTime.MinValue) // startDate = CHelper.GetWeekStartByDate(DTCWeek.Value); UserList.Items.Clear(); TimeTrackingBlockTypeInstance inst = MetaObjectActivator.CreateInstance <TimeTrackingBlockTypeInstance>(TimeTrackingBlockTypeInstance.GetAssignedMetaClass(), blockTypeInstanceId); if (Mediachase.Ibn.Data.Services.Security.CheckObjectRight(inst, TimeTrackingManager.Right_AddAnyTTBlock)) { #region 1. Make the Dictionary of Principal Dictionary <int, string> allUsers = new Dictionary <int, string>(); Principal[] principals = Principal.List(new FilterElementCollection(FilterElement.EqualElement("Card", "User"), FilterElement.EqualElement("Activity", 3)), new SortingElementCollection(new SortingElement("Name", SortingElementType.Asc))); foreach (Principal p in principals) { allUsers.Add(p.PrimaryKeyId.Value, p.Name); } #endregion #region 2. Make the list of the Id (to pass it as array) and the Dictionary of TimeTrackingBlock List <int> idList = new List <int>(); Dictionary <int, TimeTrackingBlock> allblocks = new Dictionary <int, TimeTrackingBlock>(); TimeTrackingBlock[] blocks = TimeTrackingBlock.List(FilterElement.EqualElement("StartDate", startDate), FilterElement.EqualElement("BlockTypeInstanceId", blockTypeInstanceId)); foreach (TimeTrackingBlock block in blocks) { idList.Add(block.PrimaryKeyId.Value); allblocks.Add(block.PrimaryKeyId.Value, block); } #endregion #region 3. Get the list of the existing blocks with rights and remove the forbidden items from allUsers SerializableDictionary <int, Collection <string> > objectRights = Mediachase.Ibn.Data.Services.Security.GetAllowedRights(TimeTrackingBlock.GetAssignedMetaClass(), idList.ToArray()); foreach (KeyValuePair <int, Collection <string> > item in objectRights) { int id = item.Key; Collection <string> allowedRights = item.Value; TimeTrackingBlock block = allblocks[id]; int ownerId = block.OwnerId; if (!allowedRights.Contains(Mediachase.Ibn.Data.Services.Security.RightWrite)) { allUsers.Remove(ownerId); } } #endregion #region 4. Fill in the dropdown foreach (KeyValuePair <int, string> item in allUsers) { UserList.Items.Add(new ListItem(item.Value, item.Key.ToString())); } #endregion } else { Mediachase.IBN.Business.UserLight usr = Mediachase.IBN.Business.Security.CurrentUser; UserList.Items.Add(new ListItem(usr.LastName + ", " + usr.FirstName, usr.UserID.ToString())); } if (savedValue != null) { CHelper.SafeSelect(UserList, savedValue); } }
public static void RegisterFinances(TimeTrackingBlock block, string rowId, DateTime regDate) { if (!Configuration.TimeTrackingModule) { throw new Mediachase.Ibn.LicenseRestrictionException(); } if ((bool)block.Properties["AreFinancesRegistered"].Value) { throw new NotSupportedException("Finances are already registered."); } if (!TimeTrackingBlock.CheckUserRight(block, TimeTrackingManager.Right_RegFinances)) { throw new Mediachase.Ibn.AccessDeniedException(); } /// TimeTrackingEntryId, UserId, ObjectTypeId, ObjectId, Title, /// Day1, Day2, Day3, Day4, Day5, Day6, Day7, Total, TotalApproved, Rate, Cost DataTable dt = GetListTimeTrackingItemsForFinances_DataTable(block.BlockTypeInstanceId, block.StartDate, block.OwnerId); using (DbTransaction tran = DbTransaction.Begin()) { // O.R. [2008-07-29]: We don't need to check the "Write" right for Entry and Block using (SkipSecurityCheckScope scope = Mediachase.Ibn.Data.Services.Security.SkipSecurityCheck()) { foreach (DataRow row in dt.Rows) { // O.R. [2008-07-28]: Rate and TotalApproved may contain null values, so we need do assign them TimeTrackingEntry entry = MetaObjectActivator.CreateInstance <TimeTrackingEntry>(TimeTrackingEntry.GetAssignedMetaClass(), (int)row["TimeTrackingEntryId"]); entry.Properties["Rate"].Value = row["Rate"]; entry.Properties["TotalApproved"].Value = row["TotalApproved"]; entry.Save(); double cost = (double)row["Cost"]; if (cost == 0d) { continue; } // O.R. [2008-07-24] Now we use ProjectId /* ObjectTypes objectType = ObjectTypes.Timesheet; * int objectId = (int)row["TimeTrackingEntryId"]; */ ObjectTypes objectType = ObjectTypes.Project; int objectId = block.ProjectId.Value; if (row["ObjectTypeId"] != DBNull.Value && row["ObjectId"] != DBNull.Value) { objectType = (ObjectTypes)row["ObjectTypeId"]; objectId = (int)row["ObjectId"]; } // row["TotalApproved"] alwas has not null value ActualFinances.Create(objectId, objectType, regDate, rowId, cost, row["Title"].ToString(), block.PrimaryKeyId.Value, (double)row["TotalApproved"], (int)block.OwnerId); } block.Properties["AreFinancesRegistered"].Value = true; block.Save(); } // Recalculate TotalMinutes and TotalApproved RecalculateProjectAndObjects(block); tran.Commit(); } }
private void BindAllProjectsGrid(DateTime startDate, int userId) { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("ObjectId", typeof(int))); dt.Columns.Add(new DataColumn("ObjectTypeId", typeof(int))); dt.Columns.Add(new DataColumn("ObjectName", typeof(string))); dt.Columns.Add(new DataColumn("BlockTypeInstanceId", typeof(int))); DataRow dr; #region 1. Make the list of all BlockTypeInstances Dictionary <int, string> allList = new Dictionary <int, string>(); bool isProject = false; foreach (ListItem li in BlockInstanceList.Items) { if (!isProject) { // Check that we have reached the [ All Projects ] if (li.Value == "0") { isProject = true; } continue; } allList.Add(int.Parse(li.Value, CultureInfo.InvariantCulture), li.Text); } #endregion #region 2. Get the list of the existing blocks by StartDate and OwnerId List <int> idList = new List <int>(); Dictionary <int, TimeTrackingBlock> existingBlocks = new Dictionary <int, TimeTrackingBlock>(); foreach (TimeTrackingBlock block in TimeTrackingBlock.List(FilterElement.EqualElement("StartDate", startDate), FilterElement.EqualElement("OwnerId", userId), FilterElement.IsNotNullElement("ProjectId"))) { idList.Add(block.PrimaryKeyId.Value); existingBlocks.Add(block.PrimaryKeyId.Value, block); } #endregion #region 3. Get the security info by existing blocks and remove the forbidden items from allList SerializableDictionary <int, Collection <string> > objectRights = Mediachase.Ibn.Data.Services.Security.GetAllowedRights(TimeTrackingBlock.GetAssignedMetaClass(), idList.ToArray()); foreach (KeyValuePair <int, Collection <string> > item in objectRights) { int id = item.Key; Collection <string> allowedRights = item.Value; TimeTrackingBlock block = existingBlocks[id]; if (!allowedRights.Contains(Mediachase.Ibn.Data.Services.Security.RightWrite)) { allList.Remove(block.BlockTypeInstanceId); } } #endregion #region 4. Fill in the DataTable foreach (KeyValuePair <int, string> item in allList) { bool isHeaderAdded = false; int instanceId = item.Key; string instanceName = item.Value; using (IDataReader reader = Mediachase.IBN.Business.TimeTracking.GetListTimeTrackingItemsForAdd(instanceId, startDate, userId)) { while (reader.Read()) { if (!isHeaderAdded) { dr = dt.NewRow(); dr["ObjectId"] = instanceId; dr["ObjectTypeId"] = ProjectObjectType; dr["ObjectName"] = instanceName; dr["BlockTypeInstanceId"] = instanceId; dt.Rows.Add(dr); isHeaderAdded = true; } dr = dt.NewRow(); dr["ObjectId"] = reader["ObjectId"]; dr["ObjectTypeId"] = reader["ObjectTypeId"]; dr["ObjectName"] = reader["ObjectName"]; dr["BlockTypeInstanceId"] = reader["BlockTypeInstanceId"]; dt.Rows.Add(dr); } } } #endregion MainGrid.DataSource = dt.DefaultView; MainGrid.DataBind(); }