private void registrarIva(Poliza p, List<GFacturaPorCompra> facs) {
    // Impuesto de gastos
    for (GFacturaPorCompra fac : facs) {
      PolizaDet a = p.agregarPartida();
      a.setCuenta(getCuenta("117"));
      a.setDescripcion("Iva x acreditar");
      String pattern = "IVA F:{0} {1}";
      String descripcion2 =
          MessageFormat.format(
              pattern, fac.getDocumento(), fac.getCompra().getProveedor().getNombreRazon());
      a.setDescripcion2(descripcion2);
      CantidadMonetaria impuestoGastos = CantidadMonetaria.pesos(0);
      for (GCompraDet det : fac.getCompra().getPartidas()) {
        if (!det.getProducto().getInversion()) {
          CantidadMonetaria imp = det.getImpuestoMN();
          impuestoGastos = impuestoGastos.add(imp);
        }
      }
      a.setDebe(impuestoGastos.amount());
      if ((fac.getCompra().getRet1MN() != null)
          && (fac.getCompra().getRet1MN().amount().doubleValue() > 0)) {
        a.setDebe(a.getDebe().subtract(fac.getCompra().getRet1MN().amount()));
      }
      a.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
      a.setReferencia2(fac.getCompra().getSucursal().getNombre());
    }
    /** Impuesto de gastos* */
    for (GFacturaPorCompra fac : facs) {
      PolizaDet a = p.agregarPartida();
      a.setCuenta(getCuenta("117"));
      a.setDescripcion("Iva x acreditar");
      String pattern = "IVA F:{0} {1}";
      String descripcion2 =
          MessageFormat.format(
              pattern, fac.getDocumento(), fac.getCompra().getProveedor().getNombreRazon());
      a.setDescripcion2(descripcion2);

      CantidadMonetaria impuestoGastos = CantidadMonetaria.pesos(0);
      for (GCompraDet det : fac.getCompra().getPartidas()) {
        if (det.getProducto().getInversion()) {
          CantidadMonetaria imp = det.getImpuestoMN();
          impuestoGastos = impuestoGastos.add(imp);
        }
      }
      a.setDebe(impuestoGastos.amount());
      a.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
      a.setReferencia2(fac.getCompra().getSucursal().getNombre());
    }
  }
 private PolizaDet generarPartidaDeProvision(Poliza p, GFacturaPorCompra fac) {
   if (fac.getDocumento().equalsIgnoreCase("21")) {
     System.out.println("DEBUG..");
   }
   if (!fac.getRequisiciones().isEmpty()) {
     Requisicion r = fac.getRequisiciones().iterator().next().getRequisicion();
     if (r.getConcepto() != null) {
       if (r.getConcepto().getId() == 737332L) {
         return null;
       }
     }
   }
   PolizaDet a = p.agregarPartida();
   a.setCuenta(getCuenta("212"));
   a.setDescripcion("");
   String pattern = "PROV F:{0} {1}";
   String descripcion =
       MessageFormat.format(
           pattern, fac.getDocumento(), fac.getCompra().getProveedor().getNombreRazon());
   a.setDescripcion2(descripcion);
   a.setHaber(fac.getTotatMN().amount());
   a.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
   a.setReferencia2(fac.getCompra().getSucursal().getNombre());
   return a;
 }
  /**
   * @param dets
   * @param registros
   */
  public void registrarGasto(
      final List<GCompraDet> dets, final Poliza poliza, final String factura) {
    GCompraDet det = dets.get(0);
    PolizaDet asiento = poliza.agregarPartida();
    asiento.setCuenta(getCuenta("600"));
    asiento.setDescripcion("");

    String pattern = "F-{0} {1}";
    String descripcion2 =
        MessageFormat.format(pattern, det.getFactura(), det.getProducto().getDescripcion());
    descripcion2 = StringUtils.substring(descripcion2, 0, 50);
    asiento.setDescripcion2(descripcion2);

    if ((det.getRubro() != null) || (det.getRubro().getRubroCuentaOrigen() != null)) {
      ConceptoDeGasto concepto = det.getRubro().getRubroCuentaOrigen();
      String cc = concepto != null ? concepto.getDescripcion() : "NA";
      asiento.setDescripcion2(cc);
    }

    CantidadMonetaria debe = CantidadMonetaria.pesos(0);
    for (GCompraDet part : dets) {
      debe = debe.add(part.getImporteMN());
    }

    asiento.setDebe(debe.amount());
    asiento.setReferencia(dets.get(0).getCompra().getProveedor().getNombreRazon());
    asiento.setReferencia2(det.getSucursal().getNombre());
  }
  private void registrarRetenciones(Poliza p, List<GFacturaPorCompra> facs) {

    for (GFacturaPorCompra fac : facs) {

      for (GCompraDet det : fac.getCompra().getPartidas()) {
        if (det.getRetencion1() == RETENCION_HONORARIOS) {
          // honorarios=honorarios.add(det.getRetencion1Imp());
          // honorarios=det.getRetencion1Imp();
          PolizaDet a = p.agregarPartida();
          a.setCuenta(getCuenta("205"));
          a.setDescripcion(PolizaContableManager.IVA_RETENIDO_PENDIENTE);
          String pattern = "F:{0} {1}";
          String descripcion2 =
              MessageFormat.format(
                  pattern,
                  fac.getDocumento(),
                  fac.getCompra().getProveedor().getNombreRazon() + "aqui");
          a.setDescripcion2(descripcion2);

          a.setHaber(CantidadMonetaria.pesos(det.getRetencion2Imp().doubleValue()).amount());
          a.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
          a.setReferencia2(fac.getCompra().getSucursal().getNombre());

          PolizaDet a2 = p.agregarPartida();
          a2.setCuenta(getCuenta("117"));
          a2.setDescripcion(PolizaContableManager.IVA_POR_ACREDITAR_RETENIDO);
          a2.setDebe(CantidadMonetaria.pesos(det.getRetencion1Imp().doubleValue()).amount());
          a2.setDescripcion2(fac.getCompra().getProveedor().getNombreRazon());
          a2.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
          a2.setReferencia2(fac.getCompra().getSucursal().getNombre());

          PolizaDet a3 = p.agregarPartida();
          a3.setCuenta(getCuenta("118"));
          a3.setDescripcion("ISR RETENIDO PENDIENTE X PAGAR");
          a3.setHaber(CantidadMonetaria.pesos(det.getRetencion2Imp().doubleValue()).amount());
          a3.setDescripcion2(fac.getCompra().getProveedor().getNombreRazon());
          a3.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
          a3.setReferencia2(fac.getCompra().getSucursal().getNombre());

          continue;
        } else if (det.getRetencion1() == RETENCION_TRANSPORTE) {
          // Cargo a Iva Acreditable Retenido
          PolizaDet a = p.agregarPartida();
          a.setCuenta(getCuenta("205"));
          a.setDescripcion(PolizaContableManager.IVA_RETENIDO_PENDIENTE);
          String pattern = "F:{0} {1}";
          String descripcion =
              MessageFormat.format(
                  pattern, fac.getDocumento(), fac.getCompra().getProveedor().getNombreRazon());
          a.setDescripcion2(descripcion);
          a.setHaber(CantidadMonetaria.pesos(det.getRetencion1Imp().doubleValue()).amount());
          a.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
          a.setReferencia2(fac.getCompra().getSucursal().getNombre());

          // Abono a IVA RETENIDO
          PolizaDet a2 = p.agregarPartida();
          a2.setDescripcion(descripcion);
          a2.setCuenta(getCuenta("117"));
          a2.setDescripcion(PolizaContableManager.IVA_POR_ACREDITAR_RETENIDO);
          a2.setDebe(CantidadMonetaria.pesos(det.getRetencion1Imp().doubleValue()).amount());
          a2.setDescripcion2(descripcion);
          a2.setReferencia(fac.getCompra().getProveedor().getNombreRazon());
          a2.setReferencia2(fac.getCompra().getSucursal().getNombre());
        }
      }
    }
  }