CEL_Payroll/Payroll.Controls/CustomControls/fOrg.cs
2024-09-17 14:30:13 +06:00

364 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Payroll.BO;
using Ease.CoreV35;
using Ease.CoreV35.Model;
using System.Configuration;
namespace Payroll.Controls
{
public partial class fOrg : Form
{
private ObjectsTemplate<Employee> _employees;
Payroll.BO.SystemInformation _sysInfo;
OrganogramBasic _oSelectedOrg = null;
ObjectsTemplate<OrganogramBasic> _oSelectedOrgs = null;
ObjectsTemplate<OrganogramBasic> _oOrgs = null;
string _sRootNode = "";
public fOrg()
{
InitializeComponent();
}
public void Showdlg(bool sts,bool showVN)
{
this._isMultiple = sts;
this._showVacantNode = showVN;
this.ShowDialog();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
#region Is Multiple
private bool _isMultiple;
public bool IsMultiple
{
get
{
return _isMultiple;
}
set
{
_isMultiple = value;
}
}
#endregion
#region ShowVacantNode
private bool _showVacantNode;
public bool ShowVacantNode
{
get
{
return _showVacantNode;
}
set
{
_showVacantNode = value;
}
}
#endregion
public OrganogramBasic SelNode
{
get
{
return _oSelectedOrg;
}
}
public ObjectsTemplate<OrganogramBasic> SelNodes
{
get
{
return _oSelectedOrgs;
}
}
private void fOrg_Load(object sender, EventArgs e)
{
if (!this.IsMultiple)
{
trvOrg.CheckBoxes = false;
}
_oOrgs = new ObjectsTemplate<OrganogramBasic>();
//_oOrgs = OrganogramBasic.Get( EnumStatus.Regardless );
//_sysInfo = new Payroll.BO.SystemInformation();
// _sysInfo = Payroll.BO.SystemInformation.Get();
_employees = new ObjectsTemplate<Employee>();
_employees = Employee.Get();
DrawOrganogram();
}
private void DrawOrganogram()
{
Cursor.Current = Cursors.WaitCursor;
trvOrg.Nodes.Clear();
TreeNode baseNode = new TreeNode();
//Payroll.BO.ConfigurationManager omanager = new Payroll.BO.ConfigurationManager();
//Payroll.BO.Configaration oconfig = omanager.GetItem(omanager.LogicConfiguration, "company");
//if (oconfig != null)
// baseNode.Text = oconfig.Value;
//else baseNode.Text = "Company";
baseNode.Text = "H&M";
baseNode.Tag = null;
_sRootNode = baseNode.Text;
trvOrg.Nodes.Add(baseNode);
//DrawNodes(baseNode);
Cursor.Current = Cursors.Default;
}
private void DrawNodes(TreeNode parentNode)
{
ObjectsTemplate<OrganogramBasic> children = null;
if (parentNode.Tag != null)
{
children = OrganogramBasic.GetByParentId(ID.FromInteger((int)parentNode.Tag),EnumStatus.Regardless);
}
else
{
children = OrganogramBasic.GetTopParents(EnumStatus.Regardless);
}
foreach (OrganogramBasic item in children)
{
try
{
TreeNode node = new TreeNode();
node.Text = item.PositionName;
node.Tag = item.ID.Integer;
if (item.EmployeeAssigned==false)
{
if (this._showVacantNode)
{
node.NodeFont = new Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
node.ForeColor = System.Drawing.Color.Red;
}
}
else
{
if (item.OrganEmployees.Count > 0)
{
Employee oEmp = _employees.GetItem(item.OrganEmployees[0].Employee);
if (oEmp != null)
node.Name = oEmp.EmployeeNo.ToString();
}
}
parentNode.Nodes.Add(node);
DrawNodes(node);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Falied to load", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void btnSearch_Click(object sender, EventArgs e)
{
DrawOrganogram();
if (txtID.Text != "")
{
trvOrg.CollapseAll();
foreach (TreeNode tn in trvOrg.Nodes)
{
FindNode(tn);
}
}
}
private void FindNode(TreeNode tn)
{
foreach (TreeNode t in tn.Nodes)
{
if (t.Nodes.Count == 0)
{
if (t.Name == txtID.Text)
{
try
{
TreeNode[] arr = trvOrg.Nodes.Find(t.Name, true);
for (int i = 0; i < arr.Length; i++)
{
trvOrg.SelectedNode = arr[i];
trvOrg.SelectedNode.BackColor = Color.Lavender;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Falied to load", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return;
}
}
else
{
if (t.Name == txtID.Text)
{
try
{
TreeNode[] arr = trvOrg.Nodes.Find(t.Name, true);
for (int i = 0; i < arr.Length; i++)
{
trvOrg.SelectedNode = arr[i];
trvOrg.SelectedNode.BackColor = Color.Lavender;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Falied to load", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return;
}
else
FindNode(t);
}
}
}
private void btnOk_Click(object sender, EventArgs e)
{
_oOrgs = OrganogramBasic.Get(EnumStatus.Regardless);
if (!IsMultiple)
{
if (trvOrg.SelectedNode != null)
{
_oSelectedOrg = new OrganogramBasic();
_oSelectedOrg = _oOrgs.Find(delegate(OrganogramBasic oItem) { return oItem.ID.Integer ==(int)trvOrg.SelectedNode.Tag; });
if (_oSelectedOrg.Status != EnumStatus.Active)
{
MessageBox.Show("The selected node is not active yet." , "Node is not active", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (this._showVacantNode)
{
if (_oSelectedOrg.OrganEmployees.Count > 0)
{
MessageBox.Show("Employee [ " + _oSelectedOrg.OrganEmployees[0].Employee.EmployeeNo + " , " + _oSelectedOrg.OrganEmployees[0].Employee.Name + " ] is already assigned.", "Cannot Assign", MessageBoxButtons.OK, MessageBoxIcon.Error);
_oSelectedOrg = null;
trvOrg.SelectedNode = null;
return;
}
}
}
}
else
{
_oSelectedOrgs = new ObjectsTemplate<OrganogramBasic>();
foreach (TreeNode tn in trvOrg.Nodes)
{
if (tn.Text == _sRootNode && tn.Checked==true)
{
MessageBox.Show("Cannot select root node: " + tn.Text);
return;
}
CheckForSelNode(tn);
}
}
this.Close();
}
private void CheckForSelNode(TreeNode tn)
{
foreach (TreeNode t in tn.Nodes)
{
if (t.Nodes.Count == 0)
{
if (t.Checked)
{
try
{
_oSelectedOrg = new OrganogramBasic();
_oSelectedOrg = _oOrgs.Find(delegate(OrganogramBasic oItem) { return oItem.ID.Integer == (int)t.Tag; });
_oSelectedOrgs.Add(_oSelectedOrg);
}
catch { }
}
}
else
{
if (t.Checked)
{
try
{
_oSelectedOrg = new OrganogramBasic();
_oSelectedOrg = _oOrgs.Find(delegate(OrganogramBasic oItem) { return oItem.ID.Integer == (int)t.Tag; });
_oSelectedOrgs.Add(_oSelectedOrg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Falied to load", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
CheckForSelNode(t);
}
}
}
private void trvOrg_DoubleClick(object sender, EventArgs e)
{
if (!_isMultiple)
btnOk_Click(null, null);
}
private void trvOrg_AfterSelect(object sender, TreeViewEventArgs e)
{
if (_employees != null && _employees.Count > 0)
_employees = Employee.GetAllEmps();
if (trvOrg.SelectedNode.Nodes.Count == 0)
DrawNodesForAll(trvOrg.SelectedNode);
if (trvOrg.SelectedNode.Tag == null) return;
}
private void DrawNodesForAll(TreeNode parentNode)
{
ObjectsTemplate<OrganogramBasic> children = null;
if (parentNode.Tag != null)
children = OrganogramBasic.GetByParentId(ID.FromInteger((int)parentNode.Tag), EnumStatus.Regardless);
else
children = OrganogramBasic.GetTopParents(EnumStatus.Regardless);
foreach (OrganogramBasic item in children)
{
TreeNode node = new TreeNode();
node.Text = item.PositionName;
node.Tag = item.ID.Integer;
if (item.EmployeeAssigned == true)
{
foreach (OrganogramEmployee ogemp in item.OrganEmployees)
{
Employee oEmp = _employees.GetItem(ogemp.EmployeeID);
if (oEmp == null) continue;
node.Text = node.Text + "[" + oEmp.EmployeeNo + " " + oEmp.Name + "]";
node.Name = oEmp.EmployeeNo.ToString();
node.ImageIndex = 38;
node.SelectedImageIndex = 38;
break;
}
}
else
{
if (this._showVacantNode)
{
node.NodeFont = new Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
node.ForeColor = System.Drawing.Color.Red;
}
}
if (item.Status == EnumStatus.Inactive)
{
node.BackColor = Color.LightGray;
node.Text = node.Text + " [" + "InActive" + "]";
}
parentNode.Nodes.Add(node);
//DrawNodesForAll(node);
}
}
}
}