private void btnCancelChange_Click(object sender, EventArgs e)
        {
            VehicleWheelViewModel vwChanged = VehicleWheelList.Where(vw => vw.Id == this.SelectedVehicleWheel.Id).FirstOrDefault();

            if (vwChanged != null)
            {
                SpecialSparepartDetailViewModel wheelDetail = lookUpChangedSerialNumber.GetSelectedDataRow() as SpecialSparepartDetailViewModel;

                if (wheelDetail != null)
                {
                    _wheelDetailChanged.Remove(wheelDetail);

                    vwChanged.ReplaceWithWheelDetailName         = string.Empty;
                    vwChanged.ReplaceWithWheelDetailId           = 0;
                    vwChanged.ReplaceWithWheelDetailSerialNumber = string.Empty;
                    vwChanged.IsUsedWheelRetrieved = false;
                    vwChanged.Price       = 0;
                    vwChanged.SparepartId = 0;

                    ClearSelection();
                }
            }

            gvVehicleWheel.RefreshData();
        }
        private void btnNewVehicleWheel_Click(object sender, EventArgs e)
        {
            foreach (var item in this.VehicleWheelList)
            {
                SpecialSparepartDetailViewModel toRemove = WheelDetailList.Where(wd => wd.SerialNumber == item.WheelDetail.SerialNumber).FirstOrDefault();
                if (toRemove != null)
                {
                    this.WheelDetailList.Remove(toRemove);
                }
            }

            VehicleWheelList.Add(new VehicleWheelViewModel
            {
                WheelDetail = new SpecialSparepartDetailViewModel()
            });
            gridVehicleWheel.DataSource = VehicleWheelList;
            gvVehicleWheel.BestFitColumns();
        }
        protected override void ExecuteSave()
        {
            if (!bgwSave.IsBusy)
            {
                bool   validated  = true;
                string errMessage = "";

                FormHelpers.CurrentMainForm.UpdateStatusInformation("Memeriksa nomor seri yang kembar dalam daftar", false);

                List <string> duplicatedWheel = VehicleWheelList.Where(wh => !string.IsNullOrEmpty(wh.WheelDetail.SerialNumber)).GroupBy(x => x.WheelDetail.SerialNumber)
                                                .Where(group => group.Count() > 1)
                                                .Select(group => group.Key).ToList();

                if (duplicatedWheel.Count > 0)
                {
                    errMessage += "Terdapat ban yang sama! \n";
                    validated   = false;
                }

                FormHelpers.CurrentMainForm.UpdateStatusInformation("Memeriksa kode kendaraan yang kembar pada database", false);

                if (!_presenter.IsCodeValidated())
                {
                    errMessage += "Kode sudah terdaftar! \n";
                    validated   = false;
                }

                FormHelpers.CurrentMainForm.UpdateStatusInformation("Memeriksa nomor polisi yang kembar pada database", false);

                if (!_presenter.IsLicenseNumberValidated())
                {
                    errMessage += "Nopol sudah terdaftar! \n";
                    validated   = false;
                }

                if (FieldsValidator.Validate() && valGroupName.Validate() && validated)
                {
                    FormHelpers.CurrentMainForm.UpdateStatusInformation("Proses Penyimpanan dimulai", false);

                    try
                    {
                        MethodBase.GetCurrentMethod().Info("Save Vehicle's changes");
                        this.Enabled = false;
                        bgwSave.RunWorkerAsync();
                    }
                    catch (Exception ex)
                    {
                        MethodBase.GetCurrentMethod().Fatal("An error occured while trying to save Vehicle", ex);
                        this.ShowError("Proses simpan data Kendaraan gagal!");
                    }
                }
                else
                {
                    this.ShowWarning(errMessage);
                }
            }
            else
            {
                this.Enabled = false;
            }
        }
        private void btnChangeWheel_Click(object sender, EventArgs e)
        {
            SPKWheelChange editor = Bootstrapper.Resolve <SPKWheelChange>();

            editor.SelectedSPK = this.SelectedSPK;
            editor.VehicleId   = this.VehicleId;

            if (this.VehicleWheelList != null)
            {
                editor.VehicleWheelList = this.VehicleWheelList;
            }

            editor.ShowDialog(this);
            this.VehicleWheelList = editor.VehicleWheelList;

            foreach (VehicleWheelViewModel vw in VehicleWheelList.Where(w => w.ReplaceWithWheelDetailId > 0))
            {
                if (!SPKSparepartList.Any(sp => sp.SparepartId == vw.SparepartId))
                {
                    this.SPKSparepartList.Add(new SPKDetailSparepartViewModel
                    {
                        Sparepart = new SparepartViewModel
                        {
                            Id   = vw.SparepartId,
                            Name = vw.ReplaceWithWheelDetailName,
                            Code = vw.WheelDetail.Sparepart.Code
                        },
                        SparepartId = vw.SparepartId,
                    });
                }

                //temp remove by Tegar

                SpecialSparepartDetailViewModel changedVwDetail = _presenter.GetSpecialSparepartDetail(vw.ReplaceWithWheelDetailId);
                if (changedVwDetail.PurchasingDetail != null)
                {
                    if (!SPKSparepartDetailList.Any(spd => spd.PurchasingDetail != null && spd.PurchasingDetailId == changedVwDetail.PurchasingDetailId))
                    {
                        this.SPKSparepartDetailList.Add(new SPKDetailSparepartDetailViewModel
                        {
                            PurchasingDetailId       = changedVwDetail.PurchasingDetailId,
                            PurchasingDetail         = changedVwDetail.PurchasingDetail,
                            SpecialSparepartDetailId = changedVwDetail.Id,
                            SpecialSparepartDetail   = changedVwDetail,
                            SPKDetailSparepartId     = changedVwDetail.SparepartId,
                            Qty = 1
                        });
                    }
                    else
                    {
                        SPKDetailSparepartDetailViewModel detail = SPKSparepartDetailList.Where(spd => spd.PurchasingDetail != null && spd.PurchasingDetailId == changedVwDetail.PurchasingDetailId).FirstOrDefault();
                        detail.Qty += 1;
                    }
                }

                if (changedVwDetail.SparepartManualTransaction != null)
                {
                    if (!SPKSparepartDetailList.Any(spd => spd.SparepartManualTransaction != null && spd.SparepartManualTransactionId == changedVwDetail.SparepartManualTransactionId))
                    {
                        this.SPKSparepartDetailList.Add(new SPKDetailSparepartDetailViewModel
                        {
                            SparepartManualTransactionId = changedVwDetail.SparepartManualTransactionId,
                            SparepartManualTransaction   = changedVwDetail.SparepartManualTransaction,
                            SpecialSparepartDetailId     = changedVwDetail.Id,
                            SpecialSparepartDetail       = changedVwDetail,
                            SPKDetailSparepartId         = changedVwDetail.SparepartId,
                            Qty = 1
                        });
                    }
                    else
                    {
                        SPKDetailSparepartDetailViewModel detail = SPKSparepartDetailList.Where(spd => spd.SparepartManualTransaction != null && spd.SparepartManualTransactionId == changedVwDetail.SparepartManualTransactionId).FirstOrDefault();
                        detail.Qty += 1;
                    }
                }

                SPKDetailSparepartViewModel spkSp = SPKSparepartList.Where(sp => sp.SparepartId == vw.SparepartId).FirstOrDefault();

                if (spkSp != null)
                {
                    spkSp.TotalQuantity++;
                    spkSp.TotalPrice = spkSp.TotalPrice + vw.Price;
                }
            }

            RefreshSparepartGrid();
            CalculateTotalSparepart();
        }