Esempio n. 1
0
 public void LoadFromTemplate()
 {
     if (LabourTimeEntry.CopyDataFromTemplate(_headerRecord.ProjectId, _headerRecord.LogDate, _headerRecord.Id))
     {
         SetCurrent(_headerRecord);
         LemHeader.SqlUpdateSubmitStatus(_headerRecord.Id, EnumSubmitStatus.Open);
     }
     else
     {
         GuiCommon.ShowMessage("The template data is not available.");
     }
 }
Esempio n. 2
0
 private void gvLabour_RowDeleting(object sender, DevExpress.Data.RowDeletingEventArgs e)
 {
     if (GuiCommon.ShowMessage("Delete Record?", "Confirmation", PopupType.Yes_No) == PopupResult.No)
     {
         e.Cancel = true;
     }
     else
     {
         DataRow row = gvLabour.GetDataRow(e.RowHandle);
         LabourTimeEntry.DeleteEntry((int)row[colId.FieldName]);
         LemHeader.SqlUpdateSubmitStatus(_headerRecord.Id, EnumSubmitStatus.Open);
     }
 }
Esempio n. 3
0
        private void CalcOvertime(DataRow row, string colName)
        {
            var sqlUpdate = new Action <int, decimal>((timeCodeId, val) =>
            {
                if (row[colId.FieldName] != DBNull.Value)
                {
                    if (TimeCode.GetTimeCode(timeCodeId).ValueType == EnumValueType.Hours)
                    {
                        LabourTimeDetail.SqlUpdateHours((int)row[colId.FieldName], timeCodeId, val);
                    }
                    else
                    {
                        LabourTimeDetail.SqlUpdateAmount((int)row[colId.FieldName], timeCodeId, val);
                    }
                }
            });

            bool handled = false;

            if ((bool)row[colManual.FieldName] == false)
            {
                var ot = OvertimeLimit.GetOvertime(_headerRecord.ProjectId, (int)row[colEmpNum.FieldName]);

                var regTimeCode = TimeCode.GetTimeCodeList(EnumBillingRateType.Regular).SingleOrDefault(x => colName == EnterHoursI(x));
                if (regTimeCode != null && regTimeCode.OvertimeId != null && ot != null)
                {
                    int?    currId    = ConvertEx.ToNullable <int>(row[colId.FieldName]);
                    decimal dayHours  = LabourTimeEntry.GetDayHours(_headerRecord.ProjectId, (int)row[colEmpNum.FieldName], _headerRecord.LogDate, currId);
                    decimal weekHours = LabourTimeEntry.GetWeekHours(_headerRecord.ProjectId, (int)row[colEmpNum.FieldName], _headerRecord.LogDate, currId);

                    dayHours  += ConvertEx.ToNullable <decimal>(row[colName]) ?? 0;
                    weekHours += ConvertEx.ToNullable <decimal>(row[colName]) ?? 0;

                    decimal overHours = ot.Calc(dayHours, weekHours);

                    row[EnterHoursI(regTimeCode.OvertimeId.Value)] = overHours;
                    sqlUpdate(regTimeCode.OvertimeId.Value, overHours);
                    dayHours -= overHours;

                    row[colName] = dayHours;
                    sqlUpdate(regTimeCode.MatchId, dayHours);
                    handled = true;
                }
            }

            if (!handled)
            {
                sqlUpdate(int.Parse(colName.Replace(strEnterHours, "")), ConvertEx.ToNullable <decimal>(row[colName]) ?? 0);
            }
        }
Esempio n. 4
0
        public void SetCurrent(LemHeader header)
        {
            _headerRecord = header;
            SetEnabled(_headerRecord.CheckEditable());

            var changeOrderList = ChangeOrder.ListForProject(_headerRecord.ProjectId).Select(cs => new { EstimateId = cs.EstimateId, DisplayName = cs.DisplayName }).Distinct().ToList();

            changeOrderList.Add(new { EstimateId = -1, DisplayName = "" });
            luChangeOrder.DataSource = changeOrderList;

            tableLabour.Clear();
            var list = LabourTimeEntry.GetLabourEntryList(header.Id).ToList();

            list.ForEach(lte =>
            {
                DataRow row = tableLabour.Rows.Add(
                    lte.Id,
                    lte.EmpNum,
                    lte.EmpNum,
                    lte.WorkClassCode,
                    lte.ChangeOrderId,
                    lte.Level1Id,
                    lte.Level2Id,
                    lte.Level3Id,
                    lte.Level4Id,
                    lte.Billable,
                    lte.Manual,
                    lte.IncludedHours,
                    lte.TotalHours,
                    lte.BillAmount);

                foreach (var timecode in TimeCode.SubList(TimeCode.EnumValueType.Hours))
                {
                    row[BillRateI(timecode)]   = (object)ProjectWorkClass.GetBillRate(_headerRecord.ProjectId, timecode.MatchId, (string)row[colWorkClass.FieldName]) ?? DBNull.Value;
                    row[EnterHoursI(timecode)] = (object)list.Find(x => x.Id == (int)row[colId.FieldName]).DetailList.SingleOrDefault(d => d.TimeCodeId == timecode.MatchId)?.WorkHours ?? DBNull.Value;
                }

                foreach (var timecode in TimeCode.SubList(TimeCode.EnumValueType.Dollars))
                {
                    row[EnterAmountI(timecode)] = (object)list.Find(x => x.Id == (int)row[colId.FieldName]).DetailList.SingleOrDefault(d => d.TimeCodeId == timecode.MatchId)?.Amount ?? DBNull.Value;
                }
            });

            tableLabour.AcceptChanges();
            gvLabour.BestFitColumns(true);
        }
Esempio n. 5
0
        private void gvLabour_RowUpdated(object sender, RowObjectEventArgs e)
        {
            if (gvLabour.IsNewItemRow(e.RowHandle))
            {
                DataRowView row = e.Row as DataRowView;
                row[colId.FieldName] = LabourTimeEntry.SqlInsert(_headerRecord.Id, (int)row[colEmpNum.FieldName], ConvertEx.ToNullable <int>(row[colChangeOrder.FieldName]),
                                                                 ConvertEx.ToNullable <int>(row[colLevel1Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel2Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel3Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel4Code.FieldName]),
                                                                 (bool)row[colBillable.FieldName], (bool)row[colManual.FieldName], (string)row[colWorkClass.FieldName], ConvertEx.ToNullable <decimal>(row[colIncludedHours.FieldName]),
                                                                 ConvertEx.ToNullable <decimal>(row[colTotalHours.FieldName]), ConvertEx.ToNullable <decimal>(row[colBillAmount.FieldName]));

                foreach (var timeCode in TimeCode.SubList(EnumValueType.Hours))
                {
                    LabourTimeDetail.SqlInsert((int)row[colId.FieldName], timeCode.MatchId, ConvertEx.ToNullable <decimal>(row[BillRateI(timeCode)]), ConvertEx.ToNullable <decimal>(row[EnterHoursI(timeCode)]), null);
                }

                foreach (var timeCode in TimeCode.SubList(EnumValueType.Dollars))
                {
                    LabourTimeDetail.SqlInsert((int)row[colId.FieldName], timeCode.MatchId, null, null, ConvertEx.ToNullable <decimal>(row[EnterAmountI(timeCode)]));
                }

                LemHeader.SqlUpdateSubmitStatus(_headerRecord.Id, EnumSubmitStatus.Open);
            }
        }
Esempio n. 6
0
        private void gvEmployee_CellValueChanged(object sender, CellValueChangedEventArgs e)
        {
            DataRow row      = gvLabour.GetDataRow(e.RowHandle);
            bool    needSave = false;

            if (e.Column == colEmpNum || e.Column == colEmployeeName)
            {
                int enmNum = (int)row[e.Column.FieldName];
                row[colEmpNum.FieldName]       = enmNum;
                row[colEmployeeName.FieldName] = enmNum;

                var wc = LabourTemplate.GetWorkClass(_headerRecord.ProjectId, enmNum, _headerRecord.LogDate);
                row[colWorkClass.FieldName] = wc ?? (object)Employee.GetEmployee(enmNum)?.WorkClassCode ?? DBNull.Value;
                needSave = true;
            }

            if (e.Column == colEmpNum || e.Column == colEmployeeName || e.Column == colWorkClass)
            {
                UpdateBillRate(row);
                CalcTotal(row);
                needSave = true;
            }

            if (e.Column == colManual)
            {
                bool manual = (bool)row[colManual.FieldName];
                if (!manual)
                {
                    foreach (var timeCode in TimeCode.SubList(TimeCode.EnumValueType.Hours))
                    {
                        row[EnterHoursI(timeCode)] = 0;
                    }
                    CalcTotal(row);
                }
                needSave = true;
            }

            if (e.Column == colLevel1Code)
            {
                row[colLevel2Code.FieldName] = DBNull.Value;
                row[colLevel3Code.FieldName] = DBNull.Value;
                row[colLevel4Code.FieldName] = DBNull.Value;
                needSave = true;
            }

            if (e.Column == colLevel2Code)
            {
                row[colLevel3Code.FieldName] = DBNull.Value;
                row[colLevel4Code.FieldName] = DBNull.Value;
                needSave = true;
            }

            if (e.Column == colLevel3Code)
            {
                row[colLevel4Code.FieldName] = DBNull.Value;
                needSave = true;
            }

            if (e.Column.FieldName.Contains(strEnterHours))
            {
                CalcOvertime(row, e.Column.FieldName);
                CalcTotal(row);
                needSave = true;
            }

            if (new GridColumn[] { colChangeOrder, colBillable }.Contains(e.Column))
            {
                needSave = true;
            }

            if (needSave && !gvLabour.IsNewItemRow(e.RowHandle))
            {
                LabourTimeEntry.SqlUpdate((int)row[colId.FieldName], (int)row[colEmpNum.FieldName], ConvertEx.ToNullable <int>(row[colChangeOrder.FieldName]),
                                          ConvertEx.ToNullable <int>(row[colLevel1Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel2Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel3Code.FieldName]), ConvertEx.ToNullable <int>(row[colLevel4Code.FieldName]),
                                          (bool)row[colBillable.FieldName], (bool)row[colManual.FieldName], (string)row[colWorkClass.FieldName], ConvertEx.ToNullable <decimal>(row[colIncludedHours.FieldName]), ConvertEx.ToNullable <decimal>(row[colTotalHours.FieldName]), ConvertEx.ToNullable <decimal>(row[colBillAmount.FieldName]));
                row.AcceptChanges();

                LemHeader.SqlUpdateSubmitStatus(_headerRecord.Id, EnumSubmitStatus.Open);
            }
        }
        public IHttpActionResult Post(int syncId, [FromBody] LabourTimeEntry entry)
        {
            try
            {
                using (SqlConnection sqlcon = new SqlConnection(WebCommon.WebConnection))
                {
                    sqlcon.Open();

                    string     sSQL = @"WS_FLEM_LabourTimeEntry_PostPut";
                    SqlCommand cmd  = new SqlCommand(sSQL, sqlcon);
                    cmd.CommandType = CommandType.StoredProcedure;

                    SqlParameter paraMatchId;
                    cmd.Parameters.Add(new SqlParameter("@SyncId", syncId));
                    cmd.Parameters.Add(new SqlParameter("@CompanyId", entry.CompanyId));
                    cmd.Parameters.Add(paraMatchId = new SqlParameter("@MatchId", entry.MatchId)
                    {
                        Direction = ParameterDirection.InputOutput
                    });
                    cmd.Parameters.Add(new SqlParameter("@HeaderMatchId", entry.HeaderId));
                    cmd.Parameters.Add(new SqlParameter("@EmpNum", entry.EmpNum));
                    cmd.Parameters.Add(new SqlParameter("@Level1Id", (object)entry.Level1Id ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@Level2Id", (object)entry.Level2Id ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@Level3Id", (object)entry.Level3Id ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@Level4Id", (object)entry.Level4Id ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@Billable", entry.Billable));
                    cmd.Parameters.Add(new SqlParameter("@Manual", entry.Manual));
                    cmd.Parameters.Add(new SqlParameter("@wcCode", entry.WorkClassCode));
                    cmd.Parameters.Add(new SqlParameter("@IncludedHours", (object)entry.IncludedHours ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@TotalHours", (object)entry.TotalHours ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@BillAmount", (object)entry.BillAmount ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@EstId", (object)entry.ChangeOrderId ?? DBNull.Value));
                    cmd.ExecuteNonQuery();

                    string     sqlDetail = @"WS_FLEM_LabourTimeDetail_PostPut";
                    SqlCommand cmdDetail = new SqlCommand(sqlDetail, sqlcon);
                    cmdDetail.CommandType = CommandType.StoredProcedure;
                    cmdDetail.Parameters.Add(new SqlParameter("@SyncId", syncId));
                    cmdDetail.Parameters.Add(new SqlParameter("@CompanyId", entry.CompanyId));
                    cmdDetail.Parameters.Add(new SqlParameter("@EntryId", paraMatchId.Value));
                    cmdDetail.Parameters.Add(new SqlParameter("@TimeCodeId", null));
                    cmdDetail.Parameters.Add(new SqlParameter("@WorkHours", null));
                    cmdDetail.Parameters.Add(new SqlParameter("@BillAmount", null));

                    foreach (var detail in entry.DetailList)
                    {
                        cmdDetail.Parameters["@TimeCodeId"].Value = detail.TimeCodeId;
                        if (detail.Amount == null)
                        {
                            cmdDetail.Parameters["@WorkHours"].Value  = detail.WorkHours ?? 0;
                            cmdDetail.Parameters["@BillAmount"].Value = detail.BillRate ?? 0;
                        }
                        else
                        {
                            cmdDetail.Parameters["@WorkHours"].Value  = detail.Amount;
                            cmdDetail.Parameters["@BillAmount"].Value = 1;
                        }

                        cmdDetail.ExecuteNonQuery();
                    }

                    return(Ok(paraMatchId.Value));
                }
            }
            catch (Exception e)
            {
                SqlCommon.ReportInfo(e.Message);
                return(BadRequest(e.Message));
            }
        }