MpBizInventory.java :  » ERP-CRM-Financial » Evaristo-4.0 » com » m16e » mpbiz » Java Open Source

Java Open Source » ERP CRM Financial » Evaristo 4.0 
Evaristo 4.0 » com » m16e » mpbiz » MpBizInventory.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.m16e.mpbiz;

import com.m16e.mpbiz.common.MpBizAppConfig;
import com.m16e.mpbiz.common.MpBizAppContext;
import com.m16e.mpbiz.common.bizclasses.MpBizException;
import com.m16e.mpbiz.common.MpBizUser;
import com.m16e.mpbiz.docs.MpBizDoc;
import com.m16e.mpbiz.docs.MpBizDocLin;
import com.m16e.mpbiz.docs.MpDocException;
import com.m16e.mpbiz.docs.MpDocFactory;
import com.m16e.mpbiz.docs.manipulators.ProdDocLinData;
import com.m16e.mpbiz.prods.MpBizProd;
import com.m16e.mpbiz.tables.DbDoc;
import com.m16e.mpbiz.tables.DbDocLin;
import com.m16e.mpbiz.tables.DbProd;
import com.m16e.mpbiz.tables.DbProdArm;
import com.m16e.mpbiz.tables.DbProdLot;
import com.m16e.mpbiz.tables.DbProdLotArm;
import com.m16e.tools.Barcode;
import com.m16e.tools.KnownBarcodes;
import com.m16e.tools.MpAppContext;
import com.m16e.tools.MpDay;
import com.m16e.tools.MpTimestamp;
import com.m16e.tools.MpToolsException;
import com.m16e.tools.Tools;
import com.m16e.tools.db.Database;
import com.m16e.tools.db.DatabaseException;
import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import org.apache.log4j.Logger;

/**
 *
 * @author carlos
 */
///////////////////////////////////////////////////////////////
public class MpBizInventory 
{
  static Logger logger = Logger.getLogger( MpBizInventory.class );

  private static int consoleColumns = 40;

  Integer docId = null;
  int lastDocLinId = 0;
  boolean printLabelsByDefault = false;
  int warehouseId = 0;

  Console console = null;
  BufferedReader consoleReader = null;

  ///////////////////////////////////////////////////////////////
  public MpBizInventory() 
  {
//    console = System.console();
    if( console == null )
    {
      InputStreamReader isr = new InputStreamReader( System.in );
      consoleReader = new BufferedReader( isr );
    }
  }

  ///////////////////////////////////////////////////////////////
  public MpBizInventory( int warehouseId )
  {
    this();
    this.warehouseId = warehouseId;
  }

  ///////////////////////////////////////////////////////////////
  private String getUserInput() throws IOException
  {
    String input = null;
    if( console != null )
    {
      input = new String( console.readLine() );
    }
    else
    {
      input = new String( consoleReader.readLine() );
    }
    return input;
  }

  ///////////////////////////////////////////////////////////////
  private String getPasswordInput() throws IOException
  {
    String input = null;
    if( console != null )
    {
      input = new String( console.readPassword() );
    }
    else
    {
      input = new String( System.console().readPassword() );
    }
    return input;
  }

  ///////////////////////////////////////////////////////////////
  private void listLots( int warehouseId, int prodId ) 
  throws SQLException, DatabaseException
  {
    String query =
      "select " +
        DbProdLot.FN_SUPPLIER_LOT_ID + ", " +
        DbProdLotArm.T_NAME + "." + DbProdLotArm.FN_QUANT +
       " from " +
        DbProdLotArm.T_NAME + " join " +
        DbProdLot.T_NAME + " using ( " +
          DbProdLot.FN_PROD_ID + ", " + DbProdLot.FN_PROD_LOT_ID + " )" +
      " where " +
        DbProdLotArm.FN_ARM_ID + " = ? and " +
          DbProdLotArm.FN_PROD_ID + " = ? " +
      " order by " +
        DbProdLot.FN_SUPPLIER_LOT_ID;

    printLine( "Lote\t\tQuant." );
    PreparedStatement ps =
      MpAppContext.getInstance().getDatabase().getPreparedStatement( query );
    ps.setInt( 1, warehouseId );
    ps.setInt( 2, prodId );
    ResultSet rs = ps.executeQuery();
    while( rs.next() )
    {
      String supLotId = rs.getString( 1 );
      System.out.print( supLotId );
      int len = supLotId.length();
      if( len < 8 )
        System.out.print( "\t\t" );
      else
        System.out.print( "\t" );
      System.out.print( String.format( "%4.0f", rs.getDouble( 2 ) ) + "\n" );
    }
  }
  
  ///////////////////////////////////////////////////////////////
  private void removeProdLot(
    int warehouseId, ProdDocLinData dld )
  throws IOException, SQLException, DatabaseException, MpDocException, MpToolsException
  {
    MpBizProd bizProd = dld.getBizProd();
    System.out.print( "Lote a remover: " );
    String supplierLotId = getUserInput();
    printLine( "Confirma remover lote [" + supplierLotId + "] (s/N)?" );
    String s = getUserInput();
    if( s.length() == 0 || s.toLowerCase().startsWith( "s" ) )
    {
      DbProdLot prodLot =
        MpBizProd.getProdLot( bizProd.getProd().getProdId(), supplierLotId );
      if( prodLot == null )
      {
        printLine( "lote desconhecido: " + supplierLotId + "!" );
      }
      else
      {
        dld.setProdLot( prodLot );
        Database database = null;
        try
        {
          database = MpAppContext.getInstance().getDatabase();
          database.beginTransaction();
          delProdFromDoc( dld );
          if( prodLot.getById() )
          {
            if( prodLot.getQuant() == 0 )
            {
              DbProdLotArm prodLotArm =
                DbProdLotArm.getById(
                  bizProd.getProd().getProdId(), prodLot.getProdLotId(), warehouseId );
              if( prodLotArm != null )
              {
                prodLotArm.delete();
              }
              prodLot.delete();
            }
          }
          database.commitTransaction();
          printLine( "\n>>> Lote removido!\n\n" );
        }
        catch( Exception e )
        {
          logger.error( e.getMessage(), e );
        }
        finally
        {
          if( database != null && database.inTransaction() )
            database.rollbackTransaction();
        }
      }
    }
  }

  ///////////////////////////////////////////////////////////////
  private MpDay getValidDay( MpDay prev )
  throws IOException
  {
    print( "Val.(" );
    if( prev == null )
    {
      print( "AAAA-MM-DD" );
    }
    else
    {
      print( prev.getDateYYYYMMDD() );
    }

    print( "): " );
    String sValidUntill = getUserInput();
    if( prev != null && sValidUntill.length() == 0 )
    {
      sValidUntill = prev.getDateYYYYMMDD();
    }
    MpDay validUntill = null;
    for( ; validUntill == null; )
    {
      try
      {
        validUntill = new MpDay( sValidUntill );
      }
      catch( ParseException ex )
      {
        printLine( "Data INVALIDA!" );
        printLine( "O formato da data deve ser: AAAA-MM-DD (Ex. 2008-01-31)" );
        System.out.print( "Val.: " );
        sValidUntill = getUserInput();
        if( sValidUntill.length() == 0 )
          return null;
      }
    }
    return validUntill;
  }

  ///////////////////////////////////////////////////////////////
  private void countProdLot( int warehouseId, ProdDocLinData dld )
  throws IOException, SQLException, DatabaseException, MpToolsException, MpBizException
  {
    MpBizProd bizProd = dld.getBizProd();
    DbProd prod = bizProd.getProd();
    Integer prodId = prod.getProdId();
    printLine( "Lote: " );
    String supplierLotId = getUserInput();

    MpDay day = null;
    DbProdLot prodLot =
      MpBizProd.getProdLot( prodId, supplierLotId );
    boolean newProdLot = (prodLot == null);
    if( prodLot != null )
    {
      day = new MpDay( prodLot.getValidUntill() );
    }
    else
    {
      prodLot = new DbProdLot();
      prodLot.setProdId( prodId );
      prodLot.setSupplierLotId( supplierLotId );
    }
    MpDay validUntill = getValidDay( day );
    if( validUntill == null )
    {
      return;
    }
    prodLot.setValidUntill( validUntill.getSqlDate() );

    Double qtCounted = new Double( 0 );
    if( !newProdLot )
    {
      DbProdLotArm prodLotArm = new DbProdLotArm();
      prodLotArm.setArmId( warehouseId );
      prodLotArm.setProdId( prodId );
      prodLotArm.setProdLotId( prodLot.getProdLotId() );
      if( prodLotArm.getById() )
      {
        qtCounted = prodLotArm.getQuant();
      }
    }
    printLine( "Quant. (" + qtCounted + "): " );
    dld.setProdLot( prodLot );
    String s = getUserInput();
    if( s == null || s.trim().length() == 0 )
    {
      return;
    }
    qtCounted = new Double( s );
    Database database = null;
    try
    {
      database = MpAppContext.getInstance().getDatabase();
      database.beginTransaction();
      DbDocLin dl = getDocLine( dld );
      if( dl == null )
      {
        if( newProdLot )
        {
          prodLot = MpBizProd.insertProdLot( prodLot );
          String prefix =
            MpBizAppConfig.getInstance().getBarcodeGeneratedPrefix();
          final KnownBarcodes[] barcodes =
            MpBizAppConfig.getInstance().getBarcodeTypeOrder();
          String barcode =
            Barcode.validateBarcode(
              barcodes[0], prodLot.getProdId().toString(), prefix, null );
          bizProd.setUseBarcode( barcode );
          bizProd.refreshMainProdPrices();
          bizProd.update();
          bizProd.refreshBarcodes();
        }
        System.out.println( "Lote criado!" );
        dld.setProdLot( prodLot );
        dld.setQt( qtCounted );
        addProdToDoc( dld );
      }
      else
      {
        System.out.println( "Lote alterado!" );
        prodLot.update( DbProdLot.VALID_UNTILL );
        dld.setQt( qtCounted );
        updProdInDoc( dld );
      }

      database.commitTransaction();
      printLine( "\n>>> Actualizada existencia!\n\n" );
      printLabels( dld );
    }
    catch( Exception e )
    {
      logger.error( e.getMessage(), e );
    }
    finally
    {
      if( database != null && database.inTransaction() )
        database.rollbackTransaction();
    }
  }

  ///////////////////////////////////////////////////////////////
  private String getDefaultPrintOption()
  {
    if( printLabelsByDefault )
      return "S/n";
    else
      return "s/N";
  }

  ///////////////////////////////////////////////////////////////
  private void countProd( int warehouseId, String prodCode )
  throws SQLException, MpBizException, DatabaseException, IOException, MpToolsException
  {
    ProdDocLinData dld = MpBizProd.getProdFromItemCode( null, null, prodCode );
    MpBizProd bizProd = dld.getBizProd();
    if( bizProd == null )
    {    //   0123456789 123456789
      printLine( "produto desconhecido!" );
      return;
    }

    printLine( "Nome: " + bizProd.getProd().getName() );
    int prodId = bizProd.getProd().getProdId();
    DbProdArm prodArm = new DbProdArm();
    prodArm.setProdId( prodId );
    prodArm.setArmId( warehouseId );
    prodArm.persist();
    DbProd prod = bizProd.getProd();

    printLine( prod.getName() );
    if( bizProd.hasLotsControl() )
    {      //  0123456789 123456789
      printLine( "(controle de lotes)\n" );
      listLots( warehouseId, prod.getProdId() );
      printLine( "Exist.: " + prod.getQuant() );
      for( ; ; )
      {
        printLine( "--\nContar / Listar / Remover / Voltar (C/l/r/v)" );
        String s = getUserInput();
        if( s.length() == 0 || s.toLowerCase().startsWith( "c" ) )
        {
          countProdLot( warehouseId, dld );
          break;
        }
        if( s.toLowerCase().startsWith( "l" ) )
        {
          listLots( warehouseId, prod.getProdId() );
        }
        else if( s.toLowerCase().startsWith( "r" ) )
        {
          removeProdLot( warehouseId, dld );
        }
        else if( s.toLowerCase().startsWith( "v" ) )
        {
          return;
        }
        else
          break;
      }
    }
    else
    {
      String s = null;
      Double qt = null;
      for( ; ; )
      {
        printLine( "Exist. (" + prodArm.getExistencia() + "): " );
        try
        {
          s = getUserInput();
          if( s.length() > 0 )
            qt = Double.parseDouble( s );
        }
        catch( NumberFormatException e )
        {
          printLine( "Dados invalidos!" );
          continue;
        }
        break;
      }
      if( s.length() > 0 )
      {
        DbDocLin dl = getDocLine( dld );
        Database database = null;
        try
        {
          database = MpAppContext.getInstance().getDatabase();
          database.beginTransaction();
          dld.setQt( qt );
          if( dl == null )
          {
            System.out.println( "Lote criado!" );
            addProdToDoc( dld );
          }
          else
          {
            updProdInDoc( dld );
          }
          database.commitTransaction();
          printLine( "\n>>> Actualizada existencia!\n\n" );
          printLabels( dld );
        }
        catch( Exception e )
        {
          logger.error( e.getMessage(), e );
        }
        finally
        {
          if( database != null && database.inTransaction() )
            database.rollbackTransaction();
        }
      }
    }
  }
  
  ///////////////////////////////////////////////////////////////
  private void printLabels( ProdDocLinData dld )
  throws IOException, DatabaseException, SQLException, MpToolsException, MpBizException
  {
    MpBizProd bizProd = dld.getBizProd();
    boolean print = printLabelsByDefault;
    printLine( "Imprimir etiqueta(s)? (" + getDefaultPrintOption() + ")?" );
    String s = getUserInput();
    if( s.toLowerCase().startsWith( "s" ) )
    {
      print = true;
    }
    else if( s.toLowerCase().startsWith( "n" ) )
    {
      print = false;
    }
    if( print )
    {
      if( bizProd.hasLotsControl() )
        bizProd.printLabel( dld.getProdLot().getProdLotId(), dld.getQt().intValue() );
      else
        bizProd.printLabel( dld.getQt().intValue() );
    }
  }

  ///////////////////////////////////////////////////////////////
  private int listDocs()
  throws SQLException, DatabaseException
  {
    MpDay day = new MpDay();
    for( int f = 0; f < 7; f++ )
      day.prevDay();
    java.util.List<DbDoc> docs =
      DbDoc.getList(
        false,
        DbDoc.FN_TIPO_ENT_ID + " = ? and " +
        DbDoc.FN_TIPO_DOC_ID + " = ? and " +
        DbDoc.FN_USER_ID + " = ? and " +
        DbDoc.FN_DATA_DOC + " >= ?",
        DbDoc.FN_DOC_ID,
        MpDocFactory.TENT_INTERNAL,
        MpDocFactory.TDOC_ACERTO_INVENTARIO,
        MpBizUser.getInstance().getUserId(),
        day.getSqlDate() );
    if( docs.size() > 0 )
    {
      printLine( "Doc.\t\tData" );
      printLine( "=====================" );
      for( DbDoc doc: docs )
      {
        String sDocId = String.format( "%10d", doc.getDocId() );
        printLine( sDocId + "\t" + new MpDay( doc.getDataDoc() ).getDateYYYYMMDD() );
      }
    }
    return docs.size();
  }

  ///////////////////////////////////////////////////////////////
  /**
   * 
   * @param warehouseId
   * @throws java.sql.SQLException
   * @throws IOException
   * @throws DatabaseException
   */
  public void countProds()
  throws SQLException, IOException, DatabaseException, MpDocException
  {
    if( !login() )
      return;

    printLine( "\f" );
    int nDocs = listDocs();
    if( nDocs > 0 )
    {
      for( ; ; )
      {
        printLine( "Retomar documento: " );
        String s = getUserInput();
        if( s.length() == 0 )
          break;

        docId = new Integer( s );
        MpBizDoc bizDoc =
          MpBizDoc.getBizDoc(
            MpDocFactory.TENT_INTERNAL,
            MpDocFactory.TDOC_ACERTO_INVENTARIO,
            docId );
        if( bizDoc != null )
        {
          java.util.List<MpBizDocLin> docLines = bizDoc.getDocLines();
          if( docLines.size() > 0)
          {
            lastDocLinId =
              docLines.get( docLines.size() - 1 ).getDocLin().getDocLinId();
          }
          break;
        }
        printLine( "documento desconhecido (" + docId + ")\n" );
        docId = null;
      }
    }
    for( ; ; )
    {
      try
      {
//        println( "--\nContar / Listar / Remover (C/l/r)" );
//        String s = getUserInput();
//        if( s.length() == 0 || s.toLowerCase().startsWith( "c" ) )
//        {
//          countProdLot( warehouseId, bizProd );
//          break;
//        }
        printLine( "--\n(x-termina; l-lista)" );
        print( "Codigo: " );
        String s = getUserInput().trim();
        if( s.equalsIgnoreCase( "x" ) )
        {
          printLine( "\nFim!" );
          break;
        }
        if( s.equalsIgnoreCase( "l" ) )
        {
          printDoc();
        }
        else if( s.length() > 0 )
        {
          countProd( warehouseId, s );
        }
      }
      catch( Exception e )
      {
        logger.error( e.getMessage(), e );
        return;
      }
    }
  }

  ///////////////////////////////////////////////////////////////
  private void printDoc()
  throws SQLException, DatabaseException, MpDocException
  {
    printLine( "====== ACERTO INVENTARIO ======" );
    if( docId != null )
    {
      MpBizDoc bizDoc =
        MpBizDoc.getBizDoc(
          MpDocFactory.TENT_INTERNAL,
          MpDocFactory.TDOC_ACERTO_INVENTARIO,
          docId );
      if( bizDoc != null )
      {
        printLine( "Cd. Doc.: " + docId );
        printLine( "-----------------------------" );
        printLine( "Prod ID  Cod.Barras    Designao        Quant. Lote" );
        for( MpBizDocLin mdl : bizDoc.getDocLines() )
        {
          printDocLine( mdl );
        }
      }
    }
  }

  ///////////////////////////////////////////////////////////////
  private void printDocLine( MpBizDocLin bizDocLin )
  {
    int prodPriceDecimals =
      MpBizAppContext.getInstance().getProdPriceDecimals();
    DbDocLin dl = bizDocLin.getDocLin();
    String format =
      "%8d %-13s %-18s %5." + prodPriceDecimals + "f %-8s";
    String s =
      String.format(
        format,
        dl.getItemId(), dl.getBarcode(), dl.getDescricao(), dl.getQuant(),
        (dl.getSupplierLotId() == null ? "" : dl.getSupplierLotId()) );
    printLine( s );
  }

  ///////////////////////////////////////////////////////////////
  private void printLine( String text )
  {
    for( String line : Tools.splitLine( text, consoleColumns, false ) )
    {
//      if( console != null )
//        console.printf( line );
//      else
        System.out.println( line );
    }
  }

  ///////////////////////////////////////////////////////////////
  private void print( String text )
  {
    System.out.print( text );
  }

  ///////////////////////////////////////////////////////////////
  public static int getConsoleColumns() { return consoleColumns; }
  public static void setConsoleColumns( int aConsoleColumns ) { consoleColumns = aConsoleColumns; }
  public boolean isPrintLabelsByDefault() { return printLabelsByDefault; }
  public void setPrintLabelsByDefault( boolean printLabelsByDefault ) { this.printLabelsByDefault = printLabelsByDefault; }

  ///////////////////////////////////////////////////////////////
  private boolean login()
  throws IOException, SQLException, DatabaseException
  {
    boolean logged = false;
    printLine( "Utilizador: " );
    String user = getUserInput();
    if( user.length() > 0 )
    {
      printLine( "Password: " );
      String password = getPasswordInput();
      MpBizUser mbu = MpBizUser.getInstance();
      logged = mbu.login( user, password );
    }
    return logged;
  }

  ///////////////////////////////////////////////////////////////
  private void initDoc()
  throws 
    SQLException, DatabaseException, MpDocException, MpToolsException, MpBizException
  {
    DbDoc doc = new DbDoc();
    doc.setTipoEntId( MpDocFactory.TENT_INTERNAL );
    doc.setTipoDocId( MpDocFactory.TDOC_ACERTO_INVENTARIO );
    MpDay day = new MpDay();
    doc.setDataDoc( day.getSqlDate() );
    doc.setEntId( MpDocFactory.INTERNAL_ENT );
    doc.setUserId( MpBizUser.getInstance().getUserId() );
    docId = new Integer(
      MpDocFactory.getInstance().getLastDocNumber(
        day,
        MpDocFactory.TENT_INTERNAL, MpDocFactory.TDOC_ACERTO_INVENTARIO ) + 1 );
    doc.setDocId( docId );
    int i = 0;
    boolean done = false;
    while( i++ < MpBizDoc.MAX_TRIES )
    {
      try
      {
        doc.insert();
        done = true;
      }
      catch( SQLException e )
      {
        logger.error( e.getMessage(), e );
        doc.setDocId( ++docId );
      }
      if( done )
        break;
    }
    if( !done )
      throw new MpDocException( "Erro a criar documento: ", docId );
  }

  ///////////////////////////////////////////////////////////////
  private DbDocLin getDocLine( ProdDocLinData dld )
  throws SQLException, DatabaseException, MpDocException, MpToolsException
  {
    MpBizProd bizProd = dld.getBizProd();
    DbProd prod = bizProd.getProd();
    DbProdLot prodLot = dld.getProdLot();
    DbDocLin dl = null;
    if( prodLot != null )
    {
      dl =
        DbDocLin.getSingleRecord(
          DbDocLin.FN_TIPO_ENT_ID + " = ? and " +
          DbDocLin.FN_TIPO_DOC_ID + " = ? and " +
          DbDocLin.FN_DOC_ID + " = ? and " +
          DbDocLin.FN_ITEM_ID + " = ? and " +
          DbDocLin.FN_PROD_LOT_ID + " = ?",
          MpDocFactory.TENT_INTERNAL,
          MpDocFactory.TDOC_ACERTO_INVENTARIO,
          docId,
          prod.getProdId(),
          prodLot.getProdLotId() );
    }
    else
    {
      dl =
        DbDocLin.getSingleRecord(
          DbDocLin.FN_TIPO_ENT_ID + " = ? and " +
          DbDocLin.FN_TIPO_DOC_ID + " = ? and " +
          DbDocLin.FN_DOC_ID + " = ? and " +
          DbDocLin.FN_ITEM_ID + " = ?",
          MpDocFactory.TENT_INTERNAL,
          MpDocFactory.TDOC_ACERTO_INVENTARIO,
          docId,
          prod.getProdId() );
    }
    return dl;
  }

  ///////////////////////////////////////////////////////////////
  private void addProdToDoc( ProdDocLinData dld )
  throws 
    SQLException, DatabaseException, MpDocException, MpToolsException, MpBizException
  {
    MpBizProd bizProd = dld.getBizProd();
    if( !MpAppContext.getInstance().getDatabase().inTransaction() )
    {
      throw new DatabaseException( "TRANSACTION HASD't STARED!" );
    }
    if( docId == null )
      initDoc();
    DbDocLin dl = new DbDocLin();
    dl.setTipoEntId( MpDocFactory.TENT_INTERNAL );
    dl.setTipoDocId( MpDocFactory.TDOC_ACERTO_INVENTARIO );
    dl.setDocId( docId );
    dl.setDocLinId( ++lastDocLinId );
    DbProd prod = bizProd.getProd();
    dl.setItemId( prod.getProdId() );
    dl.setAuxItemId( warehouseId );
    dl.setDescricao( prod.getName() );
    DbProdArm prodArm = DbProdArm.getById( warehouseId, prod.getProdId() );
    double exist = 0.0;
    if( prodArm != null )
    {
      exist = prodArm.getExistencia();
    }
    dl.setQuant( dld.getQt() - exist );
    dl.setBarcode( bizProd.getUseBarcode() );
    DbProdLot prodLot = dld.getProdLot();
    if( prodLot != null )
    {
      exist = 0.0;
      DbProdLotArm prodLotArm =
        DbProdLotArm.getById(
          prod.getProdId(), prodLot.getProdLotId(), warehouseId );
      if( prodLotArm != null )
      {
        exist = prodLotArm.getQuant();
      }
      dl.setQuant( dld.getQt() - exist );
      dl.setProdLotId( prodLot.getProdLotId() );
      dl.setSupplierLotId( prodLot.getSupplierLotId() );
      dl.setTs1( new MpTimestamp( prodLot.getValidUntill() ).getSqlTimestamp() );
    }
    dl.insert();
  }

  ///////////////////////////////////////////////////////////////
  private void updProdInDoc( ProdDocLinData dld )
  throws SQLException, DatabaseException, MpDocException, MpToolsException
  {
    MpBizProd bizProd = dld.getBizProd();
    if( !MpAppContext.getInstance().getDatabase().inTransaction() )
    {
      throw new DatabaseException( "TRANSACTION HASD't STARED!" );
    }
    DbProd prod = bizProd.getProd();
    DbProdLot prodLot = dld.getProdLot();
    DbDocLin dl = getDocLine( dld );
    dl.setDescricao( prod.getName() );
    DbProdArm prodArm = DbProdArm.getById( warehouseId, prod.getProdId() );
    double exist = 0.0;
    if( prodArm != null )
    {
      exist = prodArm.getExistencia();
    }
//    dl.setQuant( dl.getQuant() + count - prod.getQuant() );
    dl.setBarcode( bizProd.getUseBarcode() );
    ArrayList<Integer> alChangedFields = new ArrayList<Integer>();
    alChangedFields.add( DbDocLin.DESCRICAO );
    alChangedFields.add( DbDocLin.QUANT );
    alChangedFields.add( DbDocLin.BARCODE );
    if( prodLot == null )
    {
      dl.setQuant( dl.getQuant() + dld.getQt() - exist );
    }
    else
    {
      exist = 0.0;
      DbProdLotArm prodLotArm =
        DbProdLotArm.getById(
          prod.getProdId(), prodLot.getProdLotId(), warehouseId );
      if( prodLotArm != null )
      {
        exist = prodLotArm.getQuant();
      }
      dl.setQuant( dl.getQuant() + dld.getQt() - exist );
      dl.setProdLotId( prodLot.getProdLotId() );
      dl.setSupplierLotId( prodLot.getSupplierLotId() );
      dl.setTs1( new MpTimestamp( prodLot.getValidUntill() ).getSqlTimestamp() );
      alChangedFields.add( DbDocLin.PROD_LOT_ID );
      alChangedFields.add( DbDocLin.SUPPLIER_LOT_ID );
      alChangedFields.add( DbDocLin.TS1 );
    }
    dl.update( alChangedFields );
  }

  ///////////////////////////////////////////////////////////////
  private void delProdFromDoc( ProdDocLinData dld )
  throws SQLException, DatabaseException, MpDocException, MpToolsException
  {
    MpBizProd bizProd = dld.getBizProd();
    if( !MpAppContext.getInstance().getDatabase().inTransaction() )
    {
      throw new DatabaseException( "TRANSACTION HASD't STARED!" );
    }
    DbProd prod = bizProd.getProd();
    DbProdLot prodLot = dld.getProdLot();
    DbDocLin dl = null;
    if( prodLot != null )
    {
      dl =
        DbDocLin.getSingleRecord(
          DbDocLin.FN_TIPO_ENT_ID + " = ? and " +
          DbDocLin.FN_TIPO_DOC_ID + " = ? and " +
          DbDocLin.FN_DOC_ID + " = ? and " +
          DbDocLin.FN_ITEM_ID + " = ? and " +
          DbDocLin.FN_PROD_LOT_ID + " = ?",
          MpDocFactory.TENT_INTERNAL,
          MpDocFactory.TDOC_ACERTO_INVENTARIO,
          docId,
          prod.getProdId(),
          prodLot.getProdLotId() );
    }
    else
    {
      dl =
        DbDocLin.getSingleRecord(
          DbDocLin.FN_TIPO_ENT_ID + " = ? and " +
          DbDocLin.FN_TIPO_DOC_ID + " = ? and " +
          DbDocLin.FN_DOC_ID + " = ? and " +
          DbDocLin.FN_ITEM_ID + " = ?",
          MpDocFactory.TENT_INTERNAL,
          MpDocFactory.TDOC_ACERTO_INVENTARIO,
          docId,
          prod.getProdId() );
    }
    if( dl != null )
    {
      dl.delete();
    }
    else
    {
      printLine( "Lote nao consta do documento presente!" );
    }
  }

  ///////////////////////////////////////////////////////////////
  static public void main( String[] args ) 
  {
    try
    {
      System.out.println( String.format( "val: %5d", 4 ));
//      countProds();
    }
    catch( Exception e )
    {
      logger.error( e.getMessage(), e );
    }
    System.exit( 0 );
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.