Advertisement
vilgelmbb

TaskReconcile TaskCompletionButtons

Mar 4th, 2015
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.84 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Drawing;
  6. using DevExpress.XtraBars;
  7. using DevExpress.XtraBars.Docking2010;
  8. using DevExpress.XtraBars.Ribbon;
  9. using DocsVision.BackOffice.CardLib.CardDefs;
  10. using DocsVision.BackOffice.ObjectModel;
  11. using DocsVision.BackOffice.ObjectModel.Services.Entities.KindSetting;
  12. using DocsVision.Platform.Data.Metadata;
  13. using DocsVision.Platform.Data.Metadata.CardModel;
  14.  
  15. namespace DigDes.AnteiManagement.Helpers
  16. {
  17.     public partial class TaskReconcile
  18.     {
  19.         private string completeTaskByCompletionParameterLogMessage;
  20.         internal IMetadataProvider MetadataProvider
  21.         {
  22.             get { return MyContext.GetService<IMetadataProvider>(); }
  23.         }
  24.  
  25.         private RibbonPage commonRibbonPage;
  26.  
  27.         internal RibbonPage CommonRibbonPage
  28.         {
  29.             get
  30.             {
  31.                 return commonRibbonPage ?? (commonRibbonPage = Customizable.RibbonControl.Pages[0]);
  32.             }
  33.         }
  34.  
  35.         private TaskCompletionParameter currentCompletionParameter;
  36.  
  37.         internal string CompleteTaskByCompletionParameterLogMessage;
  38.  
  39.         private RibbonPageGroup ribbonCompletionParameterPageGroup;
  40.  
  41.         //internal RibbonPageGroup RibbonCompletionParameterPageGroup
  42.         //{
  43.         //    get
  44.         //    {
  45.         //        return ribbonCompletionParameterPageGroup ??
  46.         //               (ribbonCompletionParameterPageGroup = ControlsDictionary.FindRibbonPageGroup("pseudoCompletion"));
  47.         //    }
  48.         //}
  49.  
  50.         private TaskSetting _taskSetting;
  51.  
  52.         internal TaskSetting TaskSetting
  53.         {
  54.             get
  55.             {
  56.                 return _taskSetting ??
  57.                        (_taskSetting =
  58.                            Task != null ? TaskService.GetKindSettings(Task.SystemInfo.CardKind) : null);
  59.             }
  60.         }
  61.         private void UpdateRibbonCompletionParameters()
  62.         {
  63.             if (this.Task.SystemInfo.State == null)
  64.             {
  65.                 if (this.commonRibbonPage.Groups.Contains(ribbonCompletionParameterPageGroup))
  66.                 {
  67.                     this.commonRibbonPage.Groups.Remove(ribbonCompletionParameterPageGroup);
  68.                 }
  69.                 return;
  70.             }
  71.             System.Collections.Generic.IEnumerable<StatesStateMachineBranch> source = StateService.FindLineBranchesByStartState(this.Task.SystemInfo.State);
  72.             if (source.FirstOrDefault((StatesStateMachineBranch item) => item.EndState.BuiltInState == Task.CompletedState.Id && item.Operation.BuiltInOperation == Task.CompleteOperation.Id) == null)
  73.             {
  74.                 if (this.commonRibbonPage.Groups.Contains(ribbonCompletionParameterPageGroup))
  75.                 {
  76.                     this.commonRibbonPage.Groups.Remove(ribbonCompletionParameterPageGroup);
  77.                 }
  78.                 return;
  79.             }
  80.             System.Collections.Generic.List<TaskCompletionParameter> list = this.TaskService.GetCompletionParameters(this.Task).ToList<TaskCompletionParameter>();
  81.             if (list.Count == 1 && list[0].Name.Equals(this.TaskSetting.Name))
  82.             {
  83.                 this.UpdateRibbonCompletionParameter(list[0]);
  84.                 return;
  85.             }
  86.             BarButtonItem[] array;
  87.             this.UpdateRibbonCompletionParameters(list, out array);
  88.             if (array != null && array.Length > 0)
  89.             {
  90.                 if (!this.commonRibbonPage.Groups.Contains(ribbonCompletionParameterPageGroup))
  91.                 {
  92.                     this.ribbonCompletionParameterPageGroup = new RibbonPageGroup("Варианты завершения")
  93.                     {
  94.                         Name = "pseudoCompletion",
  95.                         AllowTextClipping = false,
  96.                         ShowCaptionButton = false
  97.                     };
  98.                     this.commonRibbonPage.Groups.Add(this.ribbonCompletionParameterPageGroup);
  99.                 }
  100.                 this.ribbonCompletionParameterPageGroup.ItemLinks.Clear();
  101.                 BarButtonItem[] array2 = array;
  102.                 for (int i = 0; i < array2.Length; i++)
  103.                 {
  104.                     BarButtonItem item2 = array2[i];
  105.                     this.ribbonCompletionParameterPageGroup.ItemLinks.Add(item2);
  106.                 }
  107.                 return;
  108.             }
  109.             if (commonRibbonPage.Groups.Contains(ribbonCompletionParameterPageGroup))
  110.             {
  111.                 commonRibbonPage.Groups.Remove(ribbonCompletionParameterPageGroup);
  112.             }
  113.         }
  114.  
  115.         private void UpdateRibbonCompletionParameters(System.Collections.Generic.IEnumerable<TaskCompletionParameter> completionParameters, out BarButtonItem[] buttons)
  116.         {
  117.             System.Collections.Generic.List<BarButtonItem> list = new System.Collections.Generic.List<BarButtonItem>();
  118.             foreach (TaskCompletionParameter current in completionParameters)
  119.             {
  120.                 BarButtonItem barButtonItem = new BarButtonItem(Customizable.BarManager, current.Name);
  121.                 barButtonItem.LargeGlyph = (barButtonItem.Glyph = this.GetCompletionParameterIcon(current));
  122.                 barButtonItem.Tag = current;
  123.                 if (current.Operation != null)
  124.                 {
  125.                     barButtonItem.Visibility = (StateService.IsOperationAllowed(current.Operation, this.Task) ? BarItemVisibility.Always : BarItemVisibility.Never);
  126.                     barButtonItem.Enabled = AccessCheckingService.IsOperationAllowed(this.Task, current.Operation);
  127.                 }
  128.                 barButtonItem.ItemClick += new ItemClickEventHandler(this.CompletionParameterItem_ItemClick);
  129.                 list.Add(barButtonItem);
  130.             }
  131.             buttons = list.ToArray();
  132.         }
  133.  
  134.         private void UpdateRibbonCompletionParameter(TaskCompletionParameter taskCompletionParameter)
  135.         {
  136.             if (this.TaskSetting != null)
  137.             {
  138.                 this.currentCompletionParameter = taskCompletionParameter;
  139.                 TaskCompletionParametersSetting taskCompletionParametersSetting = this.TaskSetting.Completion.TaskCompletionParametersSetting;
  140.                 SectionField field = this.MetadataProvider.GetField(taskCompletionParametersSetting.DisplayFieldId);
  141.                 if (Task.SystemInfo.State == null || taskCompletionParametersSetting.DisplayFieldSectionId == Guid.Empty || taskCompletionParametersSetting.DisplayFieldId == System.Guid.Empty || (taskCompletionParametersSetting.DisplayFieldType != DocsVision.Platform.Data.Metadata.CardModel.FieldType.Enum && field.LinkedSectionId != RefBaseUniversal.ItemTypes.ID))
  142.                 {
  143.                     return;
  144.                 }
  145.                 IEnumerable<StatesStateMachineBranch> enumerable = StateService.FindLineBranchesByStartState(Task.SystemInfo.State);
  146.                 if (enumerable == null || enumerable.Count<StatesStateMachineBranch>() == 0 || this.commonRibbonPage.Groups.Contains(ribbonCompletionParameterPageGroup))
  147.                 {
  148.                     this.commonRibbonPage.Groups.Remove(this.ribbonCompletionParameterPageGroup);
  149.                     return;
  150.                 }
  151.                 if (enumerable.FirstOrDefault((StatesStateMachineBranch item) => item.EndState.BuiltInState == Task.CompletedState.Id && item.Operation.BuiltInOperation == Task.CompleteOperation.Id) != null && !this.commonRibbonPage.Groups.Contains(this.ribbonCompletionParameterPageGroup))
  152.                 {
  153.                     this.ribbonCompletionParameterPageGroup = new RibbonPageGroup("Варианты завершения")
  154.                     {
  155.                         Name = "pseudoCompletion",
  156.                         ShowCaptionButton = false,
  157.                         AllowTextClipping = false
  158.                     };
  159.                     System.Collections.Generic.IEnumerable<BarButtonItem> enumerable2 = this.PrepareCompletionParameterButtons(field);
  160.                     if (this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayType == CompletionParameterDisplayType.DropDown || enumerable2.Count<BarButtonItem>() > 3)
  161.                     {
  162.                         BarButtonItem barButtonItem = new BarButtonItem();
  163.                         barButtonItem.ButtonStyle = BarButtonStyle.DropDown;
  164.                         barButtonItem.Caption = "Выбрать решение";// Resources.TaskCardControl_ChangeCompletionParameterCaption;}
  165.                         barButtonItem.DropDownControl = this.CreateCompletionParameterPopupMenu(enumerable2);
  166.                         this.ribbonCompletionParameterPageGroup.ItemLinks.Add(barButtonItem);
  167.                     }
  168.                     else
  169.                     {
  170.                         if (this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayType == CompletionParameterDisplayType.Buttons)
  171.                         {
  172.                             foreach (BarButtonItem current in enumerable2)
  173.                             {
  174.                                 this.ribbonCompletionParameterPageGroup.ItemLinks.Add(current);
  175.                             }
  176.                         }
  177.                     }
  178.                     this.commonRibbonPage.Groups.Add(this.ribbonCompletionParameterPageGroup);
  179.                 }
  180.             }
  181.         }
  182.  
  183.         private System.Collections.Generic.IEnumerable<BarButtonItem> PrepareCompletionParameterButtons(SectionField sectionField)
  184.         {
  185.             System.Collections.Generic.List<BarButtonItem> list = new System.Collections.Generic.List<BarButtonItem>();
  186.             if (this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayFieldType == DocsVision.Platform.Data.Metadata.CardModel.FieldType.Enum)
  187.             {
  188.                 using (System.Collections.Generic.IEnumerator<FieldEnumValue> enumerator = sectionField.EnumValues.GetEnumerator())
  189.                 {
  190.                     while (enumerator.MoveNext())
  191.                     {
  192.                         FieldEnumValue current = enumerator.Current;
  193.                         string localization = current.DisplayName.GetLocalization(System.Globalization.CultureInfo.CurrentCulture);
  194.                         BarButtonItem barButtonItem = new BarButtonItem(Customizable.BarManager,
  195.                             string.IsNullOrEmpty(localization) ? current.Name : localization) {Tag = current};
  196.                         barButtonItem.ItemClick += new ItemClickEventHandler(this.CompletionParameterButton_ItemClick);
  197.                         list.Add(barButtonItem);
  198.                     }
  199.                     return list;
  200.                 }
  201.             }
  202.             if (this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayFieldType == DocsVision.Platform.Data.Metadata.CardModel.FieldType.RefId && sectionField.LinkedSectionId == RefBaseUniversal.ItemTypes.ID)
  203.             {
  204.                 BaseUniversalItemType @object = MyContext.GetObject<BaseUniversalItemType>(this.TaskSetting.Completion.TaskCompletionParametersSetting.ItemTypeId);
  205.                 if (@object != null)
  206.                 {
  207.                     foreach (BaseUniversalItem current2 in @object.Items)
  208.                     {
  209.                         BarButtonItem barButtonItem2 = new BarButtonItem(Customizable.BarManager, current2.Name)
  210.                         {
  211.                             Tag = current2
  212.                         };
  213.                         barButtonItem2.ItemClick += new ItemClickEventHandler(this.CompletionParameterButton_ItemClick);
  214.                         list.Add(barButtonItem2);
  215.                     }
  216.                 }
  217.             }
  218.             return list;
  219.         }
  220.  
  221.         private Image GetCompletionParameterIcon(TaskCompletionParameter parameter)
  222.         {
  223.             if (parameter.IconIco != null)
  224.             {
  225.                 return parameter.IconIco.ToBitmap();
  226.             }
  227.             return parameter.Icon;
  228.         }
  229.         private PopupMenu CreateCompletionParameterPopupMenu(IEnumerable<BarButtonItem> buttons)
  230.         {
  231.             PopupMenu popupMenu = new PopupMenu(Customizable.BarManager);
  232.             popupMenu.AllowRibbonQATMenu = false;
  233.             if (buttons != null && buttons.Count<BarButtonItem>() > 0)
  234.             {
  235.                 popupMenu.AddItems(buttons.ToArray<BarButtonItem>());
  236.             }
  237.             return popupMenu;
  238.         }
  239.  
  240.         private void CompletionParameterItem_ItemClick(object sender, ItemClickEventArgs e)
  241.         {
  242.             try
  243.             {
  244.                 TaskCompletionParameter taskCompletionParameter = e.Item.Tag as TaskCompletionParameter;
  245.                 if (taskCompletionParameter != null)
  246.                 {
  247.                     BuiltInBranch builtInBranch = null;
  248.                     if (this.Task.SystemInfo.State.BuiltInState == Task.StartedState.Id)
  249.                     {
  250.                         builtInBranch = Task.NotStartedToCompletedByComplete;
  251.                     }
  252.                     else
  253.                     {
  254.                         if (this.Task.SystemInfo.State.BuiltInState == Task.InWorkState.Id)
  255.                         {
  256.                             builtInBranch = Task.InWorkToCompletedByComplete;
  257.                         }
  258.                         else
  259.                         {
  260.                             if (this.Task.SystemInfo.State.BuiltInState == Task.ReturnFromTheDelegationState.Id)
  261.                             {
  262.                                 builtInBranch = Task.ReturnFromTheDelegationToCompletedByComplete;
  263.                             }
  264.                         }
  265.                     }
  266.                     if (builtInBranch != null)
  267.                     {
  268.                         StatesStateMachineBranch statesStateMachineBranch = StateService.FindBranchByBuiltIn(builtInBranch, this.Task.SystemInfo.State);
  269.                         if (statesStateMachineBranch != null)
  270.                         {
  271.                             this.completeTaskByCompletionParameterLogMessage = string.Format(@"Completion parameter: {0}", e.Item.Caption);
  272.                             this.currentCompletionParameter = taskCompletionParameter;
  273.                             this.TaskService.SetTaskCompletionResult(this.Task, taskCompletionParameter);
  274.                             StatesState state = this.Task.SystemInfo.State;
  275.                             CardControl.ChangeState(statesStateMachineBranch);
  276.                             if (this.Task != null && this.Task.SystemInfo.State == state)
  277.                             {
  278.                                 this.Task.MainInfo.CompletionResult = null;
  279.                             }
  280.                         }
  281.                     }
  282.                 }
  283.             }
  284.             catch (System.Exception ex)
  285.             {
  286.                 this.ProcessException(ex);
  287.             }
  288.         }
  289.         private void CompletionParameterButton_ItemClick(object sender, ItemClickEventArgs e)
  290.         {
  291.             try
  292.             {
  293.                 System.Collections.IList section = this.Task.GetSection(this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayFieldSectionId);
  294.                 if (section != null)
  295.                 {
  296.                     if (section.Count == 0)
  297.                     {
  298.                         section.Add(new BaseCardSectionRow());
  299.                     }
  300.                     SectionField field = this.MetadataProvider.GetField(this.TaskSetting.Completion.TaskCompletionParametersSetting.DisplayFieldId);
  301.                     if (e.Item.Tag is FieldEnumValue)
  302.                     {
  303.                         (section[0] as BaseCardSectionRow)[field.Name] = ((FieldEnumValue)e.Item.Tag).Value;
  304.                     }
  305.                     else
  306.                     {
  307.                         if (e.Item.Tag is BaseUniversalItem)
  308.                         {
  309.                             (section[0] as BaseCardSectionRow)[field.Name] = MyContext.GetObjectRef<BaseUniversalItem>(e.Item.Tag as BaseUniversalItem).Id;
  310.                         }
  311.                     }
  312.                     BuiltInBranch builtInBranch = null;
  313.                     if (this.Task.SystemInfo.State.BuiltInState == Task.StartedState.Id)
  314.                     {
  315.                         builtInBranch = Task.NotStartedToCompletedByComplete;
  316.                     }
  317.                     else
  318.                     {
  319.                         if (this.Task.SystemInfo.State.BuiltInState == Task.InWorkState.Id)
  320.                         {
  321.                             builtInBranch = Task.InWorkToCompletedByComplete;
  322.                         }
  323.                         else
  324.                         {
  325.                             if (this.Task.SystemInfo.State.BuiltInState == Task.ReturnFromTheDelegationState.Id)
  326.                             {
  327.                                 builtInBranch = Task.ReturnFromTheDelegationToCompletedByComplete;
  328.                             }
  329.                         }
  330.                     }
  331.                     if (builtInBranch != null)
  332.                     {
  333.                         StatesStateMachineBranch statesStateMachineBranch = StateService.FindBranchByBuiltIn(builtInBranch, this.Task.SystemInfo.State);
  334.                         if (statesStateMachineBranch != null)
  335.                         {
  336.                             this.completeTaskByCompletionParameterLogMessage = string.Format(@"Completion parameter: {0}",e.Item.Caption);
  337.                             this.currentCompletionParameter = this.TaskService.GetCompletionParameters(this.Task).First<TaskCompletionParameter>();
  338.                             this.TaskService.SetTaskCompletionResult(this.Task, this.currentCompletionParameter);
  339.                             CardControl.ChangeState(statesStateMachineBranch);
  340.                         }
  341.                     }
  342.                 }
  343.             }
  344.             catch (System.Exception ex)
  345.             {
  346.                 this.ProcessException(ex);
  347.             }
  348.         }
  349.     }
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement