예제 #1
0
        public virtual decimal GetEmployeeRegularHours(int?employeeID, DateTime?effectiveDate)
        {
            var select = new PXSelect <PMLaborCostRate,
                                       Where <PMLaborCostRate.employeeID, Equal <Required <PMLaborCostRate.employeeID> >,
                                              And <PMLaborCostRate.type, Equal <PMLaborCostRateType.employee>,
                                                   And <PMLaborCostRate.effectiveDate, LessEqual <Required <PMLaborCostRate.effectiveDate> > > > >,
                                       OrderBy <Desc <PMLaborCostRate.effectiveDate> > >(graph);

            PMLaborCostRate res = select.Select(employeeID, effectiveDate);

            if (res != null && res.RegularHours != null)
            {
                return(res.RegularHours.Value);
            }
            else
            {
                return(GetEmployeeHoursFromCalendar(employeeID));
            }
        }
예제 #2
0
        public virtual Rate GetEmployeeRate(int?laborItemID, int?projectID, int?projectTaskID, bool?certifiedJob, string unionID, int?employeeId, DateTime?date)
        {
            if (date == null)
            {
                return(null);
            }

            var select = new PXSelect <PMLaborCostRate,
                                       Where2 <Where <PMLaborCostRate.inventoryID, Equal <Required <PMLaborCostRate.inventoryID> >, Or <PMLaborCostRate.inventoryID, IsNull> >,
                                               And2 <Where <PMLaborCostRate.employeeID, Equal <Required <PMLaborCostRate.employeeID> >, Or <PMLaborCostRate.employeeID, IsNull> >,
                                                     And2 <Where <PMLaborCostRate.projectID, Equal <Required <PMLaborCostRate.projectID> >, Or <PMLaborCostRate.projectID, IsNull> >,
                                                           And <Where <PMLaborCostRate.taskID, Equal <Required <PMLaborCostRate.taskID> >, Or <PMLaborCostRate.taskID, IsNull> > > > > >,
                                       OrderBy <Asc <PMLaborCostRate.effectiveDate> > >(graph);

            PXResultset <PMLaborCostRate> resultset = select.Select(laborItemID, employeeId, projectID, projectTaskID);

            List <PMLaborCostRate> specificRates = new List <PMLaborCostRate>();

            PMLaborCostRate certifiedRate = null;
            PMLaborCostRate unionRate     = null;


            PMLaborCostRate specific1     = null;        //Labor rate by project, project task, employee, inventory ID
            PMLaborCostRate specific2     = null;        //Labor rate by project, project task, employee, empty inventory ID
            PMLaborCostRate specific3     = null;        //Labor rate by project, project task, inventory ID
            PMLaborCostRate specific4     = null;        //Labor rate by project, project task, empty inventory ID
            PMLaborCostRate specific5     = null;        //Labor rate by project, employee, inventory ID
            PMLaborCostRate specific6     = null;        //Labor rate by project, employee, empty inventory ID
            PMLaborCostRate specific7     = null;        //Labor rate by project, inventory ID
            PMLaborCostRate specific8     = null;        //Labor rate by project, empty inventory ID
            PMLaborCostRate employeeRate1 = null;        // With LaborItem
            PMLaborCostRate employeeRate2 = null;        // Without LaborItem
            PMLaborCostRate itemRate      = null;

            foreach (PMLaborCostRate record in resultset)
            {
                if (record.EffectiveDate > date)
                {
                    continue;
                }

                if (record.Type == PMLaborCostRateType.Certified)
                {
                    if (certifiedRate == null)
                    {
                        certifiedRate = record;
                    }
                    else
                    {
                        if (record.EffectiveDate > certifiedRate.EffectiveDate)
                        {
                            certifiedRate = record;
                        }
                    }
                }
                else if (record.Type == PMLaborCostRateType.Union && !string.IsNullOrEmpty(unionID) && record.UnionID == unionID)
                {
                    if (unionRate == null)
                    {
                        unionRate = record;
                    }
                    else
                    {
                        if (record.EffectiveDate > unionRate.EffectiveDate)
                        {
                            unionRate = record;
                        }
                    }
                }
                else if (record.Type == PMLaborCostRateType.Item)
                {
                    if (itemRate == null)
                    {
                        itemRate = record;
                    }
                    else
                    {
                        if (record.EffectiveDate > itemRate.EffectiveDate)
                        {
                            itemRate = record;
                        }
                    }
                }
                else if (record.Type == PMLaborCostRateType.Employee)
                {
                    if (record.InventoryID != null)
                    {
                        if (employeeRate1 == null)
                        {
                            employeeRate1 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > employeeRate1.EffectiveDate)
                            {
                                employeeRate1 = record;
                            }
                        }
                    }
                    else
                    {
                        if (employeeRate2 == null)
                        {
                            employeeRate2 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > employeeRate2.EffectiveDate)
                            {
                                employeeRate2 = record;
                            }
                        }
                    }
                }
                else
                {
                    if (record.ProjectID == projectID && record.TaskID == projectTaskID && record.EmployeeID == employeeId && record.InventoryID != null)
                    {
                        if (specific1 == null)
                        {
                            specific1 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific1.EffectiveDate)
                            {
                                specific1 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.TaskID == projectTaskID && record.EmployeeID == employeeId && record.InventoryID == null)
                    {
                        if (specific2 == null)
                        {
                            specific2 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific2.EffectiveDate)
                            {
                                specific2 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.TaskID == projectTaskID && record.EmployeeID == null && record.InventoryID != null)
                    {
                        if (specific3 == null)
                        {
                            specific3 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific3.EffectiveDate)
                            {
                                specific3 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.TaskID == projectTaskID && record.EmployeeID == null && record.InventoryID == null)
                    {
                        if (specific4 == null)
                        {
                            specific4 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific4.EffectiveDate)
                            {
                                specific4 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.EmployeeID == employeeId && record.InventoryID != null)
                    {
                        if (specific5 == null)
                        {
                            specific5 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific5.EffectiveDate)
                            {
                                specific5 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.EmployeeID == employeeId && record.InventoryID == null)
                    {
                        if (specific6 == null)
                        {
                            specific6 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific6.EffectiveDate)
                            {
                                specific6 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.EmployeeID == null && record.InventoryID != null)
                    {
                        if (specific7 == null)
                        {
                            specific7 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific7.EffectiveDate)
                            {
                                specific7 = record;
                            }
                        }
                    }
                    else if (record.ProjectID == projectID && record.EmployeeID == null && record.InventoryID == null)
                    {
                        if (specific8 == null)
                        {
                            specific8 = record;
                        }
                        else
                        {
                            if (record.EffectiveDate > specific8.EffectiveDate)
                            {
                                specific8 = record;
                            }
                        }
                    }
                }
            }

            PMLaborCostRate specific = specific1;

            if (specific == null)
            {
                specific = specific2;
            }
            if (specific == null)
            {
                specific = specific3;
            }
            if (specific == null)
            {
                specific = specific4;
            }
            if (specific == null)
            {
                specific = specific5;
            }
            if (specific == null)
            {
                specific = specific6;
            }
            if (specific == null)
            {
                specific = specific7;
            }
            if (specific == null)
            {
                specific = specific8;
            }
            if (specific == null)
            {
                specific = employeeRate1;
            }
            if (specific == null)
            {
                specific = employeeRate2;
            }
            if (specific == null)
            {
                specific = itemRate;
            }

            PMLaborCostRate maxRate = specific;

            if (maxRate == null)
            {
                maxRate = unionRate;
            }
            else if (unionRate != null && maxRate.Rate < unionRate.Rate)
            {
                maxRate = unionRate;
            }

            if (certifiedJob == true)
            {
                if (maxRate == null)
                {
                    maxRate = certifiedRate;
                }
                else if (certifiedRate != null && maxRate.Rate < certifiedRate.Rate)
                {
                    maxRate = certifiedRate;
                }
            }

            if (maxRate == null)
            {
                return(null);
            }

            decimal?regularHours = maxRate.RegularHours;

            if (employeeRate1 != null)
            {
                regularHours = employeeRate1.RegularHours;
            }

            return(new Rate(employeeId, maxRate.EmploymentType, maxRate.Rate, defaultUOM, regularHours,
                            maxRate.EmploymentType == RateTypesAttribute.Hourly ? maxRate.Rate : maxRate.Rate *regularHours));
        }