package fr.mch.mdo.restaurant.dao.tools.migration.v1;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import fr.mch.mdo.logs.ILogger;
import fr.mch.mdo.restaurant.dao.beans.Product;
import fr.mch.mdo.restaurant.dao.beans.ProductSold;
import fr.mch.mdo.restaurant.dao.beans.Restaurant;
import fr.mch.mdo.restaurant.dao.beans.UserAuthentication;
public class DataMigrationProductSoldWork extends DataMigrationWork
{
public DataMigrationProductSoldWork(ILogger logger, File output,
Restaurant restaurant, UserAuthentication user) {
super(logger, output, restaurant, user);
}
@Override
public void execute(Connection connection) throws SQLException {
PrintWriter out = null;
String restaurantReference = super.restaurant.getReference();
List<ProductSold> productSolds = new ArrayList<ProductSold>();
PreparedStatement ps = null;
ResultSet rs = null;
try {
out = new PrintWriter(new FileWriter(output));
ps = connection.prepareStatement("SELECT scp_updated_year, scp_updated_month, scp_updated_day, pdt_id, scp_quantity" +
" FROM t_stats_consumption_product" +
//" WHERE scp_updated_year=2005 AND pdt_id='V6' " +
" ORDER BY scp_updated_year, scp_updated_month, scp_updated_day");
rs = ps.executeQuery();
ResultSetMetaData rsMetaData = rs.getMetaData();
int maxColumn = rsMetaData.getColumnCount();
logger.debug("Max Columns " + maxColumn);
while (rs.next()) {
logger.debug("START Row " + rs.getRow());
ProductSold productSold = new ProductSold();
Product product = new Product();
productSold.setProduct(product);
for (int i = 1; i <= maxColumn; i++) {
String columnLabel = rsMetaData.getColumnLabel(i).toUpperCase();
Object value = rs.getString(i);
logger.debug("Result " + columnLabel + " with Value " + value);
ProductSoldResultSetRow.valueOf(columnLabel).fillValue(productSold, value);
}
productSolds.add(productSold);
logger.debug("END Row " + rs.getRow());
}
// t_product_sold
// sessionFactoryV2.openSession().doWork(new Work() {
// @Override
// public void execute(Connection connection) throws SQLException {
// System.out.println("Removing t_product_sold rows ...");
// Statement statement = connection.createStatement();
// statement.executeUpdate("DELETE FROM t_product_sold");
// connection.commit();
// statement.close();
// connection.close();
// }
// });
int index = 0;
int maxSize = productSolds.size();
for (;index<maxSize;) {
ProductSold productSold = productSolds.get(index);
final String insertProductCategory = "INSERT INTO t_product_sold (pds_sold_year, pds_sold_month, pds_sold_day, pdt_id, pds_quantity, pds_deleted) SELECT " + productSold.getSoldYear() + ", " + productSold.getSoldMonth() + ", " + productSold.getSoldDay() + ", t_product.pdt_id, " + productSold.getQuantity() + ", false" +
" FROM t_product JOIN t_restaurant ON t_restaurant.res_id=t_product.res_id" +
" WHERE t_product.pdt_code = '" + productSold.getProduct().getCode() + "' AND t_restaurant.res_reference = '" + restaurantReference + "';";
out.println(insertProductCategory);
index++;
if (index%10 == 0) {
out.flush();
}
// System.out.println("Inserting t_product_sold row ... " + index);
// sessionFactoryV2.openSession().doWork(new Work() {
// @Override
// public void execute(Connection connection) throws SQLException {
// Statement statement = connection.createStatement();
// statement.executeUpdate(insertProductCategory);
// connection.commit();
// statement.close();
// connection.close();
// }
// });
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
}
}
if (ps != null) {
try {
ps.close();
} catch (Exception e) {
}
}
try {
out.close();
} catch (Exception e) {
}
}
}
private enum ProductSoldResultSetRow {
PDT_ID() {
public void fillValue(ProductSold productSold, Object value) {
if (value != null) {
productSold.getProduct().setCode(value.toString());
}
}
},
SCP_QUANTITY() {
public void fillValue(ProductSold productSold, Object value) {
if (value != null) {
productSold.setQuantity(new BigDecimal(value.toString()));
}
}
},
SCP_UPDATED_DAY() {
public void fillValue(ProductSold productSold, Object value) {
if (value != null) {
productSold.setSoldDay(new Integer(value.toString()));
}
}
},
SCP_UPDATED_MONTH() {
public void fillValue(ProductSold productSold, Object value) {
if (value != null) {
productSold.setSoldMonth(new Integer(value.toString()));
}
}
},
SCP_UPDATED_YEAR() {
public void fillValue(ProductSold productSold, Object value) {
if (value != null) {
productSold.setSoldYear(new Integer(value.toString()));
}
}
};
public void fillValue(ProductSold productSold, Object value) {
}
}
}