/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sikd.ikonsol.ctrl;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.primefaces.PrimeFaces;
import sikd.ikonsol.ejb.session.AkunEliminasiEjbHome;
import sikd.ikonsol.ejb.session.AkunResiprokalEjbHome;
import sikd.ikonsol.ejb.session.HeaderDataKonsolidasiEjbHome;
import sikd.ikonsol.ejb.session.RawDataEjbHome;
import sikd.ikonsol.ejb.session.SusunKonsolidasiEjbHome;
import sikd.ikonsol.model.AkunEliminasi;
import sikd.ikonsol.model.AkunResiprokal;
import sikd.ikonsol.model.HeaderDataKonsolidasi;
import sikd.ikonsol.model.RawData;
import sikd.ikonsol.model.SusunKonsolidasi;

/**
 *
 * @author Imam Bhoim
 */
@ViewScoped
@Named(value = "susunKonsolidasiBeanCtrl")
public class SusunKonsolidasiBeanCtrl implements Serializable {

    SusunKonsolidasi skons;
    SusunKonsolidasi obj;
    private List<SusunKonsolidasi> list;

    private List<AkunEliminasi> listakuneliminasi;
    private List<AkunEliminasi> listprov;
    private List<AkunResiprokal> listresiprokal, listresiprokal2;
    private List<RawData> listrawdata;
    private int tahun;

    AkunResiprokal ar;

    int idheaderdata = 0;

    private Integer progress1;

    @EJB
    SusunKonsolidasiEjbHome susunDataKonsEjbHome;

    @EJB
    AkunEliminasiEjbHome akunEliminasiEjbHome;

    @EJB
    HeaderDataKonsolidasiEjbHome headerDataEjbHome;

    @PostConstruct
    public void init() {

        list = susunDataKonsEjbHome.findAll();

    }

    public String save() {

        // simpan
        susunDataKonsEjbHome.save(skons);

        list = susunDataKonsEjbHome.findAll();
        //this.list = service.findAll();
        return "index?faces-redirect=true";
    }

    public String update() {

        susunDataKonsEjbHome.update(obj);

        list = susunDataKonsEjbHome.findAll();
        // this.list = service.findAll();
        return "index?faces-redirect=true";
    }

    public void reload() {
        list = susunDataKonsEjbHome.findAllByTahun(tahun);

    }

    public void edit(int id) {
        
        akunEliminasiEjbHome.deleteBySusun(id);
        
        obj = susunDataKonsEjbHome.findByID(id);

        if (obj.getStatus_eliminasi() == 1) {
            this.proses(id);
            this.prosesUpdate(id);
        } else {
            this.proses(id);
            this.prosesUpdate(id);
            obj.setStatus_eliminasi(1);
            obj.setStatus_proses(1);
        }

        susunDataKonsEjbHome.updateStatus(obj);
        PrimeFaces.current().ajax().update(":master:dtsusun");

        list = susunDataKonsEjbHome.findAll();

        this.refresh();
        
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Proses Susun Selesai"));


    }

    public String refresh() {
        return "index?faces-redirect=true";
    }

    public void upload(int id) {
        //obj = service.findByID(Integer.parseInt(id));
        // obj = headerDataKonsEjbHome.findByID(id);

    }

    public ArrayList<Integer> listTahun() {

        ArrayList<Integer> numbers = new ArrayList<Integer>();
        for (int years = 2015; years <= Calendar.getInstance().get(Calendar.YEAR); years++) {
            numbers.add(years);
        }
        return (numbers);
    }

    public SusunKonsolidasi getSkons() {
        return skons;
    }

    public void setSkons(SusunKonsolidasi skons) {
        this.skons = skons;
    }

    public SusunKonsolidasi getObj() {
        return obj;
    }

    public void setObj(SusunKonsolidasi obj) {
        this.obj = obj;
    }

    public List<SusunKonsolidasi> getList() {
        return list;
    }

    public void setList(List<SusunKonsolidasi> list) {
        this.list = list;
    }

    public int getTahun() {
        return tahun;
    }

    public void setTahun(int tahun) {
        this.tahun = tahun;
    }

    public SusunKonsolidasiEjbHome getSusunDataKonsEjbHome() {
        return susunDataKonsEjbHome;
    }

    public void setSusunDataKonsEjbHome(SusunKonsolidasiEjbHome susunDataKonsEjbHome) {
        this.susunDataKonsEjbHome = susunDataKonsEjbHome;
    }

    public Integer getProgress1() {
        progress1 = updateProgress(progress1);
        return progress1;
    }

    private Integer updateProgress(Integer progress) {
        if (progress == null) {
            progress = 0;
        } else {
            progress = progress + (int) (Math.random() * 35);

            if (progress > 100) {
                progress = 100;
            }
        }

        return progress;
    }

    public void setProgress1(Integer progress1) {
        this.progress1 = progress1;
    }

    public void onComplete() {

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Proses Susun Selesai"));

    }

    public void cancel() {
        progress1 = null;

    }

    public void proses(int idheader) {

        // dapatkan grup provinsi
        listprov = akunEliminasiEjbHome.selectKdProv(idheader);

        System.out.println(listprov.size());

        HeaderDataKonsolidasi hd = headerDataEjbHome.findByID(idheader);
//
        for (AkunEliminasi obj1 : listprov) {

//            // dapatkan header dan akun resiprokal
            listresiprokal = akunEliminasiEjbHome.selectResipro(hd.getIdjnslaporan());

            for (AkunResiprokal objresiprokal : listresiprokal) {
                System.out.println("KODE PEMDA " + objresiprokal.getId_kategori_pemda());
                if (objresiprokal.getId_kategori_pemda() == 1) {

                    listrawdata = akunEliminasiEjbHome.selectProvRawData(objresiprokal, obj, hd, obj1.getKdpemda());

                    String wilayah_id = akunEliminasiEjbHome.selectKdWilayah(obj1.getKdpemda()).getKdwilayah();
                    
                    System.out.println("Wilayah ID " + wilayah_id);

                    
                    for (RawData rd : listrawdata) {
                        //akunEliminasiEjbHome.saveProses();
                        AkunEliminasi ae = new AkunEliminasi();

                        ae.setTahun(obj.getTahun());
                        ae.setKdpemda(obj1.getKdpemda());
                        ae.setKdwilayah(wilayah_id);
                        ae.setKdrek1(objresiprokal.getKdlevel1());
                        ae.setKdrek2(objresiprokal.getKdlevel2());
                        ae.setKdrek3(objresiprokal.getKdlevel3());
                        ae.setKdrek4(objresiprokal.getKdlevel4());
                        ae.setKdrek5(objresiprokal.getKdlevel5());
                        ae.setDk(objresiprokal.getDk());
                        ae.setIdkatpemda(objresiprokal.getId_kategori_pemda());
                        ae.setIdbas(objresiprokal.getIdbas());
                        ae.setIdjnslaporan(objresiprokal.getId_jenislaporan());
                        ae.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                        ae.setIdjenistransfer(objresiprokal.getId_jenistransfer());
                        ae.setIdheaderkons(hd.getId());
                        ae.setKdperiode(hd.getKodeperiode());
                        ae.setNilai(rd.getRealisasi());
                        ae.setNilaieliminasi(rd.getRealisasi());
                        ae.setFlag(objresiprokal.getFlag());
                        akunEliminasiEjbHome.saveProses(ae);
                    }

                    System.out.println("PROV  " + listrawdata.size());
                } else {
                    listrawdata = akunEliminasiEjbHome.selectKabRawData(objresiprokal, obj, hd, obj1.getKdpemda());

                    String wilayah_id2 = akunEliminasiEjbHome.selectKdWilayah(obj1.getKdpemda()).getKdwilayah();

                    for (RawData rd : listrawdata) {
                        AkunEliminasi ae = new AkunEliminasi();

                        ae.setTahun(obj.getTahun());
                        ae.setKdpemda(obj1.getKdpemda());
                        ae.setKdwilayah(wilayah_id2);
                        ae.setKdrek1(objresiprokal.getKdlevel1());
                        ae.setKdrek2(objresiprokal.getKdlevel2());
                        ae.setKdrek3(objresiprokal.getKdlevel3());
                        ae.setKdrek4(objresiprokal.getKdlevel4());
                        ae.setKdrek5(objresiprokal.getKdlevel5());
                        ae.setDk(objresiprokal.getDk());
                        ae.setIdkatpemda(objresiprokal.getId_kategori_pemda());
                        ae.setIdbas(objresiprokal.getIdbas());
                        ae.setIdjnslaporan(objresiprokal.getId_jenislaporan());
                        ae.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                        ae.setIdjenistransfer(objresiprokal.getId_jenistransfer());
                        ae.setIdheaderkons(hd.getId());
                        ae.setKdperiode(hd.getKodeperiode());
                        ae.setNilai(rd.getRealisasi());
                        ae.setNilaieliminasi(rd.getRealisasi());

                        ae.setFlag(objresiprokal.getFlag());

                        akunEliminasiEjbHome.saveProses(ae);

                    }

                    System.out.println("KAB  " + listrawdata.size());
                }

            }

        }

//        listakuneliminasi = akunEliminasiEjbHome.selectCompare();
//
//        for (AkunEliminasi objak : listakuneliminasi) {
//
//            String kd = objak.getTahun()
//                    + objak.getKdpemda()
//                    + objak.getKdrek1()
//                    + objak.getKdrek2()
//                    + objak.getKdrek3()
//                    + objak.getKdrek4()
//                    + objak.getKdrek5()
//                    + objak.getDk()
//                    + objak.getIdkatpemda()
//                    + objak.getIdbas()
//                    + objak.getIdjnslaporan()
//                    + objak.getIdheaderresipo()
//                    + objak.getIdjnslaporan()
//                    + objak.getIdjenistransfer()
//                    + objak.getIdheaderkons();
//
//            objak.setKdeliminasi(kd);
//
//            System.out.println(" TEST " + kd);
//
//            akunEliminasiEjbHome.saveProses(objak);
//
//            obj.setStatus_eliminasi(1);
//            obj.setStatus_proses(1);
//            susunDataKonsEjbHome.update(obj);
        //  }
    }

    public void prosesUpdate(int idheader) {

//        // dapatkan grup provinsi
        listprov = akunEliminasiEjbHome.selectKdProv(idheader);

        for (AkunEliminasi obj1 : listprov) {
            listresiprokal2 = akunEliminasiEjbHome.selectResipro2(idheader, obj1.getKdpemda());

            for (AkunResiprokal objresiprokal : listresiprokal2) {

                // cek flag kalo 8 manual selain itu di eleminasi otomatis
                if (!objresiprokal.getFlag().equalsIgnoreCase("8")) {
                    AkunEliminasi objEliminasi = akunEliminasiEjbHome.selectCountFlag(obj1.getKdpemda(), objresiprokal.getFlag(), obj.getHeader_data_id(), objresiprokal.getHeader_id_resipro());

                    //BigDecimal rea=new BigDecimal("1");
                    
                    if (objEliminasi.getNilai() > 1) {
                        AkunEliminasi akunEliminasi = new AkunEliminasi();
                        akunEliminasi.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                        akunEliminasi.setKdpemda(obj1.getKdpemda());
                        akunEliminasi.setIdheaderkons(obj.getHeader_data_id());
                        akunEliminasi.setFlag(objresiprokal.getFlag());
                        akunEliminasiEjbHome.updateEliminasi(akunEliminasi);
                    } else {
                        AkunEliminasi akunEliminasi = new AkunEliminasi();
                        akunEliminasi.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                        akunEliminasi.setKdpemda(obj1.getKdpemda());
                        akunEliminasi.setIdheaderkons(obj.getHeader_data_id());
                        akunEliminasi.setFlag(objresiprokal.getFlag());
                        akunEliminasiEjbHome.updateEliminasiManual(akunEliminasi);
                    }
                } else {
                    AkunEliminasi akunEliminasi = new AkunEliminasi();
                    akunEliminasi.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                    akunEliminasi.setKdpemda(obj1.getKdpemda());
                    akunEliminasi.setIdheaderkons(obj.getHeader_data_id());
                    akunEliminasi.setFlag(objresiprokal.getFlag());
                    akunEliminasiEjbHome.updateEliminasiManual(akunEliminasi);
                }
                /*        switch (ar.getOpsinilai()) {
                    case 2:

//                        AkunEliminasi obja = akunEliminasiEjbHome.selectCountKabKota(objresiprokal.getHeader_id_resipro(),
//                                obj1.getKdpemda(), obj.getHeader_data_id());
//                        System.out.println("JUMLAH " + obja.getIdjenistransfer());
//
//                        if (obja.getIdjenistransfer() == 1) {
//
//                        }

                    case 3:

                        AkunEliminasi objb = akunEliminasiEjbHome.selectCountKabKota(objresiprokal.getHeader_id_resipro(),
                                obj1.getKdpemda(), obj.getHeader_data_id());
                        System.out.println("JUMLAH " + objb.getIdjenistransfer());
                        if (objb.getIdjenistransfer() == 1) {

                            AkunEliminasi objc = new AkunEliminasi();
                            objc.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
                            objc.setKdpemda(obj1.getKdpemda());
                            objc.setIdheaderkons(obj.getHeader_data_id());
                            
                            akunEliminasiEjbHome.updateProses(objc);

                        }

                        break;

                }
                
                 */

            }

        }

//        System.out.println(listprov.size());
//
//        HeaderDataKonsolidasi hd = headerDataEjbHome.findByID(idheader);
////
//        for (AkunEliminasi obj1 : listprov) {
//
////            // dapatkan header dan akun resiprokal
//            listresiprokal = akunEliminasiEjbHome.selectResipro(hd.getIdjnslaporan());
//
//            for (AkunResiprokal objresiprokal : listresiprokal) {
//                System.out.println("KODE PEMDA " + objresiprokal.getId_kategori_pemda());
//                if (objresiprokal.getId_kategori_pemda() == 1) {
//
//                    listrawdata = akunEliminasiEjbHome.selectProvRawData(objresiprokal, obj, hd, obj1.getKdpemda());
//
//                    for (RawData rd : listrawdata) {
//                        //akunEliminasiEjbHome.saveProses();
//                        AkunEliminasi ae = new AkunEliminasi();
//
//                        ae.setTahun(obj.getTahun());
//                        ae.setKdpemda(obj1.getKdpemda());
//                        ae.setKdrek1(objresiprokal.getKdlevel1());
//                        ae.setKdrek2(objresiprokal.getKdlevel2());
//                        ae.setKdrek3(objresiprokal.getKdlevel3());
//                        ae.setKdrek4(objresiprokal.getKdlevel4());
//                        ae.setKdrek5(objresiprokal.getKdlevel5());
//                        ae.setDk(objresiprokal.getDk());
//                        ae.setIdkatpemda(objresiprokal.getId_kategori_pemda());
//                        ae.setIdbas(objresiprokal.getIdbas());
//                        ae.setIdjnslaporan(objresiprokal.getId_jenislaporan());
//                        ae.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
//                        ae.setIdjenistransfer(objresiprokal.getId_jenistransfer());
//                        ae.setIdheaderkons(hd.getId());
//                        ae.setKdperiode(hd.getKodeperiode());
//                        ae.setNilai(rd.getRealisasi());
//                        ae.setNilaieliminasi(rd.getRealisasi());
//                        
//                           akunEliminasiEjbHome.saveProses(ae);
//                    }
//
//                    System.out.println("PROV  " + listrawdata.size());
//                } else {
//                    listrawdata = akunEliminasiEjbHome.selectKabRawData(objresiprokal, obj, hd, obj1.getKdpemda());
//
//                    if ((objresiprokal.getHeader_id_resipro() == 2 || objresiprokal.getHeader_id_resipro() == 10)
//                            && (!obj1.getKdpemda().equalsIgnoreCase("1") || !obj1.getKdpemda().equalsIgnoreCase("26"))) {
//                        System.out.println("Nothing");
//                    } else {
//
//                        for (RawData rd : listrawdata) {
//                            //akunEliminasiEjbHome.saveProses();
//                            AkunEliminasi ae = new AkunEliminasi();
//
//                            ae.setTahun(obj.getTahun());
//                            ae.setKdpemda(obj1.getKdpemda());
//                            ae.setKdrek1(objresiprokal.getKdlevel1());
//                            ae.setKdrek2(objresiprokal.getKdlevel2());
//                            ae.setKdrek3(objresiprokal.getKdlevel3());
//                            ae.setKdrek4(objresiprokal.getKdlevel4());
//                            ae.setKdrek5(objresiprokal.getKdlevel5());
//                            ae.setDk(objresiprokal.getDk());
//                            ae.setIdkatpemda(objresiprokal.getId_kategori_pemda());
//                            ae.setIdbas(objresiprokal.getIdbas());
//                            ae.setIdjnslaporan(objresiprokal.getId_jenislaporan());
//                            ae.setIdheaderresipo(objresiprokal.getHeader_id_resipro());
//                            ae.setIdjenistransfer(objresiprokal.getId_jenistransfer());
//                            ae.setIdheaderkons(hd.getId());
//                            ae.setKdperiode(hd.getKodeperiode());
//                            ae.setNilai(rd.getRealisasi());
//                            ae.setNilaieliminasi(rd.getRealisasi());
//
//                            System.out.println("Laporan : " + hd.getIdjnslaporan());
//                            System.out.println("Tahun : " + hd.getTahun());
//                            System.out.println("Periode : " + hd.getKodeperiode());
//                            System.out.println("Pemda : " + obj1.getKdpemda());
//                            System.out.println("Header Data : " + obj.getHeader_data_id());
//                            System.out.println("Akun 1 :" + objresiprokal.getKdlevel1());
//                            System.out.println("Akun 2 :" + objresiprokal.getKdlevel2());
//                            System.out.println("Akun 3 :" + objresiprokal.getKdlevel3());
//                            System.out.println("Akun 4 :" + objresiprokal.getKdlevel4());
//
//                            akunEliminasiEjbHome.saveProses(ae);
//
//                        }
//                    }
//                    System.out.println("KAB  " + listrawdata.size());
//                }
//
//            }
//
//        }
    }

    public List<AkunEliminasi> getListakuneliminasi() {
        return listakuneliminasi;
    }

    public void setListakuneliminasi(List<AkunEliminasi> listakuneliminasi) {
        this.listakuneliminasi = listakuneliminasi;
    }

    public List<AkunEliminasi> getListprov() {
        return listprov;
    }

    public void setListprov(List<AkunEliminasi> listprov) {
        this.listprov = listprov;
    }

    public List<AkunResiprokal> getListresiprokal() {
        return listresiprokal;
    }

    public void setListresiprokal(List<AkunResiprokal> listresiprokal) {
        this.listresiprokal = listresiprokal;
    }

    public List<RawData> getListrawdata() {
        return listrawdata;
    }

    public void setListrawdata(List<RawData> listrawdata) {
        this.listrawdata = listrawdata;
    }

    public int getIdheaderdata() {
        return idheaderdata;
    }

    public void setIdheaderdata(int idheaderdata) {
        this.idheaderdata = idheaderdata;
    }

    public List<AkunResiprokal> getListresiprokal2() {
        return listresiprokal2;
    }

    public void setListresiprokal2(List<AkunResiprokal> listresiprokal2) {
        this.listresiprokal2 = listresiprokal2;
    }

}
