public ActionResult Sejarah(PageSejarahModel page, string Command)
        {
            var user = User.Identity.GetUserId();

            PageSejarahModel.Insert(page, user, Command);
            string info = string.Empty;

            if (Command == "Hantar")
            {
                info = ManageMessageId.Tambah.ToString();
                PageSejarahModel newPage = new PageSejarahModel();
                //open same page, buat empty form
                return(RedirectToAction("Sejarah",
                                        new
                {
                    message = info,
                    page.tahunbekerja,
                    page.tahundibayar,
                    page.bulandibayar,
                    page.bulanbekerja
                }));
            }
            else if (Command == "Kemaskini")
            {
                info = ManageMessageId.Kemaskini.ToString();
                //show same page
                return(RedirectToAction("Sejarah",
                                        new
                {
                    message = info,
                    page.HR_PEKERJA,
                    page.tahunbekerja,
                    page.tahundibayar,
                    page.bulandibayar,
                    page.bulanbekerja
                }));
            }
            else //Muktamad
            {
                info = ManageMessageId.Muktamad.ToString();
                //redirect to menu
                return(RedirectToAction("ListTransaksiSambilan", "PengurusanKakitanganSambilan",
                                        new
                {
                    message = info,
                    month1 = page.bulanbekerja,
                    year1 = page.tahunbekerja,
                    year2 = page.tahundibayar,
                    month2 = page.bulandibayar
                }));
            }
        }
        public ActionResult Sejarah(ManageMessageId?message,
                                    string HR_PEKERJA, string tahunbekerja, string bulanbekerja,
                                    string tahundibayar, string bulandibayar)
        {
            ViewBag.StatusMessage =
                message == ManageMessageId.Tambah ? "Permohonan Telah Berjaya Disimpan."
              : message == ManageMessageId.Muktamad ? "Permohonan Anda Telah Muktamad."
              : message == ManageMessageId.Kemaskini ? "Permohonan Telah Berjaya Dikemaskini."
              : message == ManageMessageId.BayarTunggakan ? "Permohonan Telah Berjaya Dikemaskini."
              : "";

            PageSejarahModel page = new PageSejarahModel();

            if (!string.IsNullOrEmpty(HR_PEKERJA))
            {
                //if got No pekerja
                page = new PageSejarahModel(HR_PEKERJA, tahunbekerja, bulanbekerja,
                                            tahundibayar, bulandibayar);
                page.jumlahhari = page.GetJumlahHari();
                page.jumlahot   = page.GetJumlahOT();
            }
            else
            {
                if (!string.IsNullOrEmpty(bulanbekerja) && !string.IsNullOrEmpty(bulandibayar) &&
                    !string.IsNullOrEmpty(tahunbekerja) && !string.IsNullOrEmpty(tahundibayar))
                {
                    try
                    {
                        page.bulanbekerja = Convert.ToInt32(bulanbekerja);
                        page.bulandibayar = Convert.ToInt32(bulandibayar);
                        page.tahunbekerja = Convert.ToInt32(tahunbekerja);
                        page.tahundibayar = Convert.ToInt32(tahundibayar);
                    }
                    catch
                    {
                    }
                }
            }

            ViewBag.bulandibayar          = GetBulanDropdown(page.bulandibayar);
            ViewBag.tunggakanbulandibayar = ViewBag.bulandibayar;
            ViewBag.bulanbekerja          = GetBulanDropdown(page.bulanbekerja);
            ViewBag.tunggakanbulanbekerja = GetBulanDropdown(page.tunggakanbulanbekerja);
            return(View(page));
        }
        //will be used in to Store claculation Related to Transaksi Sambilan

        public static AgreementModels Maklumat(string HR_PEKERJA,
                                               int?tahunbekerja,
                                               int?bulanbekerja,
                                               int?tahundibayar,
                                               int?bulandibayar,
                                               string tahunbulannotis, string tahunbulanbonus, string bulankiradari, string bulankirahingga,
                                               decimal?jumlahot, int?jumlahhari)
        {
            ApplicationDbContext db = new ApplicationDbContext();
            MajlisContext        mc = new MajlisContext();

            db.Configuration.ProxyCreationEnabled = false;

            int consHariBekerja = PageSejarahModel.ConstHariBekerja; //value is 21

            //Cari Maklumat Pekerjaan
            HR_MAKLUMAT_PEKERJAAN userMaklumat = db.HR_MAKLUMAT_PEKERJAAN.Where(s => s.HR_NO_PEKERJA == HR_PEKERJA).SingleOrDefault();
            List <string>         listElaunKa  = PageSejarahModel.ListElaunKa;

            if (userMaklumat != null)
            {
                GE_JABATAN  userJabatan  = mc.GE_JABATAN.Where(s => s.GE_KOD_JABATAN == userMaklumat.HR_JABATAN).SingleOrDefault();
                GE_BAHAGIAN userBahagian = mc.GE_BAHAGIAN.Where(s => s.GE_KOD_BAHAGIAN == userMaklumat.HR_BAHAGIAN && s.GE_KOD_JABATAN == userMaklumat.HR_JABATAN).SingleOrDefault();

                //dapatkan Transaksi Sambilan Detail. ada banyak kod: C0020, E0064, E0164, E0234, GAJPS, P0015, P0035
                List <HR_TRANSAKSI_SAMBILAN_DETAIL> userTransaksiDetail = db.HR_TRANSAKSI_SAMBILAN_DETAIL
                                                                          .Where(s => s.HR_NO_PEKERJA == HR_PEKERJA &&
                                                                                 s.HR_BULAN_BEKERJA == bulanbekerja &&
                                                                                 s.HR_BULAN_DIBAYAR == bulandibayar &&
                                                                                 s.HR_TAHUN == tahundibayar &&
                                                                                 s.HR_TAHUN_BEKERJA == tahunbekerja).ToList();

                HR_MAKLUMAT_PERIBADI  userPeribadi  = db.HR_MAKLUMAT_PERIBADI.SingleOrDefault(s => s.HR_NO_PEKERJA == HR_PEKERJA);
                HR_MAKLUMAT_PEKERJAAN userPekerjaan = db.HR_MAKLUMAT_PEKERJAAN.SingleOrDefault(s => s.HR_NO_PEKERJA == HR_PEKERJA);
                HR_JAWATAN            jawatan       = db.HR_JAWATAN.SingleOrDefault(s => s.HR_KOD_JAWATAN == userPekerjaan.HR_JAWATAN);

                HR_MAKLUMAT_PEKERJAAN mpekerjaan = db.HR_MAKLUMAT_PEKERJAAN.Where(s => s.HR_NO_PEKERJA == HR_PEKERJA).SingleOrDefault();

                AgreementModels kerjaelaun = new AgreementModels();

                //if (transaksisambilandetail.Count != 0 && transaksisambilan.Count != 0)
                if (userTransaksiDetail.Count != 0)
                {
                    //kalau ada tranaksi, ambik gaji dan potongan dari tranasksi
                    decimal gajiSehari = PageSejarahModel.GetGajiSehari(db, HR_PEKERJA);
                    HR_TRANSAKSI_SAMBILAN_DETAIL gaji = userTransaksiDetail.SingleOrDefault(s => s.HR_KOD_IND == "G");
                    kerjaelaun.GAJISEHARI = gajiSehari.ToString("0.00");
                    kerjaelaun.GAJIPOKOK  = gaji.HR_JUMLAH;
                    kerjaelaun.GAJIPER3   = (gaji.HR_JUMLAH / 3).Value.ToString("0.00");

                    //elaun
                    List <HR_TRANSAKSI_SAMBILAN_DETAIL> elaunka = userTransaksiDetail
                                                                  .Where(s => listElaunKa.Contains(s.HR_KOD)).ToList();
                    List <HR_TRANSAKSI_SAMBILAN_DETAIL> elaunot = userTransaksiDetail
                                                                  .Where(s => s.HR_KOD == "E0164").ToList();
                    List <HR_TRANSAKSI_SAMBILAN_DETAIL> elaunlain = userTransaksiDetail
                                                                    .Where(s => s.HR_KOD_IND == "E" &&
                                                                           (!listElaunKa.Contains(s.HR_KOD) && s.HR_KOD != "E0164")).ToList();

                    //potongan
                    List <HR_TRANSAKSI_SAMBILAN_DETAIL> potonganksdk = userTransaksiDetail
                                                                       .Where(s => s.HR_KOD == "P0015").ToList();
                    List <HR_TRANSAKSI_SAMBILAN_DETAIL> potonganlain = userTransaksiDetail
                                                                       .Where(s => s.HR_KOD_IND == "P" && (s.HR_KOD != "P0015" && s.HR_KOD != "P0035")).ToList();
                    HR_MAKLUMAT_ELAUN_POTONGAN potonganKWSP = PageSejarahModel.GetPotonganKWSP(db, HR_PEKERJA, kerjaelaun.GAJIPOKOK.Value);

                    kerjaelaun.JABATAN     = userJabatan.GE_KETERANGAN_JABATAN;
                    kerjaelaun.BAHAGIAN    = userBahagian.GE_KETERANGAN;
                    kerjaelaun.NOKP        = userPeribadi.HR_NO_KPBARU;
                    kerjaelaun.JAWATAN     = jawatan.HR_NAMA_JAWATAN;
                    kerjaelaun.JAMBEKERJA  = elaunot.SingleOrDefault().HR_JAM_HARI;
                    kerjaelaun.HARIBEKERJA = gaji.HR_JAM_HARI;

                    //elaun
                    kerjaelaun.ELAUNKA         = elaunka.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");
                    kerjaelaun.JUMLAHBAYARANOT = elaunot.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");
                    kerjaelaun.ELAUNLAIN       = elaunlain.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");

                    //potongan
                    decimal potonganSocso = PageSejarahModel.GetPotonganSocso(db, gaji.HR_JUMLAH.Value, elaunot.Sum(s => s.HR_JUMLAH).Value);
                    kerjaelaun.POTONGANSOCSO = potonganSocso;
                    kerjaelaun.POTONGANKWSP  = potonganKWSP.HR_JUMLAH;
                    kerjaelaun.POTONGANKSDK  = potonganksdk.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");
                    kerjaelaun.POTONGLAIN    = potonganlain.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");

                    kerjaelaun.TUNGGAKANIND = userTransaksiDetail
                                              .Where(s => s.HR_KOD == "GAJPS").SingleOrDefault().HR_TUNGGAKAN_IND;

                    //calculation
                    var gajikasar = gaji.HR_JUMLAH
                                    + elaunka.Sum(s => s.HR_JUMLAH)
                                    + elaunlain.Sum(s => s.HR_JUMLAH)
                                    + elaunot.Sum(s => s.HR_JUMLAH);
                    kerjaelaun.GAJIKASAR = gajikasar.Value.ToString("0.00");
                    var gajiSebelumKWSP = gajikasar
                                          - potonganSocso
                                          - potonganksdk.Sum(s => s.HR_JUMLAH)
                                          - potonganlain.Sum(s => s.HR_JUMLAH);
                    kerjaelaun.GAJISEBELUMKWSP = gajiSebelumKWSP.Value.ToString("0.00");
                    //gaji bersih = gaji pokok + elaun - potongan
                    var bersih = kerjaelaun.GAJIPOKOK
                                 + elaunka.Sum(s => s.HR_JUMLAH)
                                 + elaunot.Sum(s => s.HR_JUMLAH)
                                 + elaunlain.Sum(s => s.HR_JUMLAH)
                                 - potonganSocso
                                 - potonganKWSP.HR_JUMLAH
                                 - potonganksdk.Sum(s => s.HR_JUMLAH)
                                 - potonganlain.Sum(s => s.HR_JUMLAH);

                    kerjaelaun.GAJIBERSIH = decimal.Parse(bersih.Value.ToString("0.00"));
                    kerjaelaun.MUKTAMAD   = gaji.HR_MUKTAMAD;

                    return(kerjaelaun);
                }
                else if (userTransaksiDetail.Count == 0)
                {
                    //gaji related
                    var gajiSehari = PageSejarahModel.GetGajiSehari(db, HR_PEKERJA);
                    kerjaelaun.GAJISEHARI = gajiSehari.ToString("0.00");
                    decimal gajiPokok = PageSejarahModel.GetGajiPokok(db, HR_PEKERJA, jumlahhari.Value);
                    kerjaelaun.GAJIPOKOK = gajiPokok;
                    decimal?gajiper3 = kerjaelaun.GAJIPOKOK / 3;
                    kerjaelaun.GAJIPER3 = gajiper3.Value.ToString("0.00");

                    List <HR_MAKLUMAT_ELAUN_POTONGAN> potonganksdk = PageSejarahModel.GetPotonganKSDK(db, HR_PEKERJA);
                    List <HR_MAKLUMAT_ELAUN_POTONGAN> potonganlain = PageSejarahModel.GetPotonganLain(db, HR_PEKERJA);
                    HR_MAKLUMAT_ELAUN_POTONGAN        potonganKWSP = PageSejarahModel.GetPotonganKWSP(db, HR_PEKERJA, kerjaelaun.GAJIPOKOK.Value);
                    List <HR_MAKLUMAT_ELAUN_POTONGAN> elaunka      = PageSejarahModel.GetElaunKa(db, HR_PEKERJA);
                    List <HR_MAKLUMAT_ELAUN_POTONGAN> elaunLain    = PageSejarahModel.GetElaunLain(db, HR_PEKERJA);

                    //semua Elaun
                    int     jumlahHariInt = Convert.ToInt32(jumlahhari != null ? jumlahhari : 0);
                    decimal jumlahJamOT   = Convert.ToDecimal(jumlahot != null ? jumlahot : 0);
                    var     elaunot       = PageSejarahModel.GetElaunOT(db, HR_PEKERJA, jumlahHariInt, jumlahJamOT);
                    kerjaelaun.JUMLAHBAYARANOT = elaunot.ToString("0.00");
                    kerjaelaun.ELAUNKA         = elaunka.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");
                    kerjaelaun.ELAUNLAIN       = elaunLain.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");

                    //semua potongan
                    decimal potonganSocso = PageSejarahModel.GetPotonganSocso(db, gajiPokok, elaunot);
                    kerjaelaun.POTONGANSOCSO = potonganSocso;
                    kerjaelaun.POTONGANKWSP  = potonganKWSP.HR_JUMLAH;
                    kerjaelaun.POTONGANKSDK  = potonganksdk.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");
                    kerjaelaun.POTONGLAIN    = potonganlain.Sum(s => s.HR_JUMLAH).Value.ToString("0.00");

                    //other info
                    kerjaelaun.JABATAN  = userJabatan.GE_KETERANGAN_JABATAN;
                    kerjaelaun.BAHAGIAN = userBahagian.GE_KETERANGAN;
                    kerjaelaun.NOKP     = userPeribadi.HR_NO_KPBARU;
                    kerjaelaun.JAWATAN  = jawatan.HR_NAMA_JAWATAN;

                    decimal?gajikasar = kerjaelaun.GAJIPOKOK
                                        + elaunka.Sum(s => s.HR_JUMLAH)
                                        + elaunLain.Sum(s => s.HR_JUMLAH)
                                        + elaunot;
                    kerjaelaun.GAJIKASAR = gajikasar.Value.ToString("0.00");
                    //double? gajikasar1 = (double)gajikasar * 0.11;
                    var gajiSebelumKWSP = gajikasar
                                          - potonganSocso
                                          - potonganksdk.Sum(s => s.HR_JUMLAH)
                                          - potonganlain.Sum(s => s.HR_JUMLAH);
                    kerjaelaun.GAJISEBELUMKWSP = gajiSebelumKWSP.Value.ToString("0.00");
                    //gaji bersih = gaji pokok + elaun - potongan
                    var bersih = kerjaelaun.GAJIPOKOK
                                 + elaunka.Sum(s => s.HR_JUMLAH)
                                 + elaunLain.Sum(s => s.HR_JUMLAH)
                                 + elaunot
                                 - potonganSocso
                                 - potonganKWSP.HR_JUMLAH
                                 - potonganksdk.Sum(s => s.HR_JUMLAH)
                                 - potonganlain.Sum(s => s.HR_JUMLAH);
                    kerjaelaun.GAJIBERSIH = decimal.Parse(bersih.Value.ToString("0.00"));
                    return(kerjaelaun);
                }
            }

            return(null);
        }
        public static List <PekerjaReportModel> GetPerkesoSambilanSukan
            (int bulanProses, int tahunProses, bool isSukan)
        {
            SPGContext           spgDb = new SPGContext();
            ApplicationDbContext db    = new ApplicationDbContext();

            //N = sambilan, A = sukan
            List <string> list_pekerja = new List <string>();

            if (isSukan)
            {
                list_pekerja = PageSejarahModel.ListPekerjaSukan;
            }
            else
            {
                list_pekerja = PageSejarahModel.ListPekerjaSambilan;
            }

            var listGaji = db.HR_TRANSAKSI_SAMBILAN_DETAIL
                           .Where(s => s.HR_BULAN_DIBAYAR == bulanProses &&
                                  s.HR_TAHUN == tahunProses &&
                                  s.HR_KOD_IND == "G" &&
                                  list_pekerja.Contains(s.HR_NO_PEKERJA)).ToList();

            List <PekerjaReportModel> pekerja = new List <PekerjaReportModel>();

            int counter = 0;

            foreach (var item in listGaji)
            {
                var bulanBekerja = item.HR_BULAN_BEKERJA;
                var tahunBekerja = item.HR_TAHUN_BEKERJA;
                var bulanDibayar = item.HR_BULAN_DIBAYAR;
                var tahunDibayar = item.HR_TAHUN;

                HR_MAKLUMAT_PERIBADI maklumatPeribat = db.HR_MAKLUMAT_PERIBADI
                                                       .Where(s => s.HR_NO_PEKERJA == item.HR_NO_PEKERJA)
                                                       .FirstOrDefault();

                var detail = PageSejarahModel.GetTRANSAKSI_SAMBILAN_DETAIL
                                 (db, item.HR_NO_PEKERJA, tahunDibayar, bulanDibayar,
                                 tahunBekerja, bulanBekerja);
                var sosco = PageSejarahModel.GetPotonganSocso(db, detail);

                if (maklumatPeribat != null)
                {
                    PekerjaReportModel m = new PekerjaReportModel();
                    counter++;
                    m.Bil             = counter;
                    m.NamaPekerja     = maklumatPeribat.HR_NAMA_PEKERJA;
                    m.NoKesSosial     = string.Empty;
                    m.NoKadPengenalan = maklumatPeribat.HR_NO_KPBARU;
                    try
                    {
                        decimal totalVal = Convert.ToDecimal
                                               (sosco.HR_CARUMAN_PEKERJA);
                        totalVal    = decimal.Round(totalVal);
                        m.CarumanRM = totalVal;
                    }
                    catch
                    {
                        m.CarumanRM = 0;
                    }
                    pekerja.Add(m);
                }
            }
            return(pekerja);
        }