
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Date;




// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.9C47D96A-1F58-ECBE-7EC8-79E3D52BF320]
// </editor-fold> 
public class Sucursal {


    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.CCE7B794-EEC2-E51D-090A-EF54668557D7]
    // </editor-fold>
    private ArrayList<Producto> mProducto;



    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.E01E5E9F-EBE7-C7F6-06A3-276488D66B9B]
    // </editor-fold>
    private ArrayList<Remesa> mRemesa;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.797F1DEF-10ED-2F15-35DE-913EC5F8AED3]
    // </editor-fold> 
    private Caja mCaja;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.855754AD-4B99-C6C8-EDF0-EA45074BFEF9]
    // </editor-fold> 
    private Empleado mEmpleado;

    public Sucursal () {
        mProducto=new ArrayList<Producto>();
        mRemesa=new ArrayList<Remesa>();
    }

     public void setRemesa (ArrayList<Remesa> val) {
        this.mRemesa = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.218C1D65-7D8D-33BA-80B9-B63AE1BC0066]
    // </editor-fold>
    public ArrayList<Remesa> getRemesa () {
        return mRemesa;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.5A8E0943-C2B7-EBB0-BED1-2561BAEDAB0E]
    // </editor-fold> 
    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.85F3FA6B-738A-2B3D-AB68-B7154C719990]
    // </editor-fold> 
    public Caja getCaja () {
        return mCaja;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.881F96D8-CA5A-3CF8-2C0F-160B01B8E5AA]
    // </editor-fold> 
    public void setCaja (Caja val) {
        this.mCaja = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0195F2F6-44FA-7E3C-758C-F4FE29CC7301]
    // </editor-fold> 
    public Empleado getEmpleado () {
        return mEmpleado;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7F5D756F-909D-9CB9-51D6-5B8E2DA0B172]
    // </editor-fold> 
    public void setEmpleado (Empleado val) {
        this.mEmpleado = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.608BD037-6484-FC95-407E-FB60B1D3FA95]
    // </editor-fold> 
    public ArrayList<Producto> getProducto () {
        return mProducto;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.226D8FCE-4245-D189-4E95-4F82BE9B8F25]
    // </editor-fold>
    public void setProducto (ArrayList<Producto> val) {
        this.mProducto = val;
    }
    public Producto devuelveProducto(String numcta){

        Iterator iterador = this.mProducto.listIterator();

        while( iterador.hasNext() ) {
            Producto p = (Producto) iterador.next();
            if (p.getNumeroProducto().compareTo(numcta)==0){
                return p;
            }

        }
        return null;
                                                   }
    public void modificarsaldo(String cta, String cantidad){// Ingreso y Reintegro
         Producto p=this.devuelveProducto(cta);//guardamos en p, el producto que coincida con el nº de cuenta
         Float f=Float.valueOf(cantidad); 
         Date fecha= new Date();
         OpBasica op= new OpBasica();
         op.setId(cta);
         op.setImporte(f);
         if(f<0)
         op.setConceptobreve("Reintegro");
         else
         op.setConceptobreve("Ingreso");
         op.setFechaOperacion(fecha);
         p.addOpBasica(op);
                                                           }



    public String verRemesa (String path) {
        String resumenRemesa="";
        try {
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea, buffer;

            while ((linea = bf.readLine()) != null) {
                buffer=linea.substring(0,4);
                if(buffer.compareTo("5180")==0){
                    //Registro cabecera presentador
                    resumenRemesa=linea.substring(28,69);
                }else if(buffer.compareTo("5680")==0){
                    //Registro individual obligatorio
                    resumenRemesa += "\n"+linea.substring(28,68);
                    resumenRemesa += "\t"+linea.substring(88,98);
                 }else if(buffer.compareTo("5980")==0){
                     //Registro total final
                    resumenRemesa += "\nTotal Remesa: "+linea.substring(88,98);
                 }
            }
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resumenRemesa;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.F68A8278-4F50-7C25-5F67-3AD08FB3712A]
    // </editor-fold>
    public void incorporarRemesa (String path) throws ParseException {
        try {
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea;
            String fechaRemesa="";
            String numCta="";
            Remesa r=new Remesa();
            while ((linea = bf.readLine()) != null) {
                String buffer;
                buffer = linea.substring(0, 4);

                if(buffer.compareTo("5180")==0){
                    //registro cabecera presentador

                    r.setNombreOrdenante(linea.substring(28,68));
                }else if(buffer.compareTo("5380")==0){
                    fechaRemesa=linea.substring(22, 28);
                }else if(buffer.compareTo("5680")==0){
                    OpRemesas op=new OpRemesas();
                    DecimalFormat df1=new DecimalFormat("#######,##");
                    Number n=df1.parse(linea.substring(88, 98));
                    op.setImporte((int) n.floatValue());
                    op.setConceptoAmpliado(r.getNombreOrdenante());
                    SimpleDateFormat df2=new SimpleDateFormat("ddMMyy");
                    op.setFechaOperacion(df2.parse(fechaRemesa));
                    r.insertaopremesa(op);
                    //leo el numcta
                    numCta=linea.substring(68,88);
                    //devuelveproducto(numcta)
                    Producto auxCta=this.devuelveProducto(numCta);
                    //insertarmovimientoensuproducto
                    if(auxCta!=null) auxCta.insertaMovimientoenCuenta(op);
                    //auxCta.insertaMovimientoenCuenta(op);
                }

            }
            this.insertaRemesaenSucursal(r);
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }

}
    public void insertaRemesaenSucursal(Remesa r){
        this.mRemesa.add(r);
    }
}

