package utils;
import java.util.Date;
import java.util.List;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.SqlRow;
import enums.Module;
/**
* Siparis, Irsaliye ve Fatura kayitlari ekstra olarak durum tarihcesi (xxx_trans_status_history) tutarlar,
* tarihce kayitlari da bu utils sinifi araciligi ile yonetilirler
*
* @author mdpinar
*
*/
public class TransStatusHistoryUtils {
/**
* Bir hareket kaydina ait tutulmus olan tarihçenin tamamı silinir
*
* @param trans id
* @param module
*/
public static void deleteAllHistory(Module module, int id) {
Ebean.createSqlUpdate("delete from " + module.name() + "_trans_status_history where trans_id = :trans_id")
.setParameter("trans_id", id)
.execute();
}
/**
* Bir hareketin yeni durumunu tarihceye ekler
*
* @param trans
* @param newStatus
* @param description
*/
public static void goForward(Module module, int transId, int statusId, String description) {
Ebean.createSqlUpdate("insert into " + module.name() + "_trans_status_history (trans_id, status_id, username, description, trans_time) " +
"values (:trans_id, :status_id, :username, :description, :trans_time) ")
.setParameter("trans_id", transId)
.setParameter("status_id", statusId)
.setParameter("username", CacheUtils.getUser().username)
.setParameter("description", description)
.setParameter("trans_time", new Date())
.execute();
setTransStatus(module, transId, statusId);
}
/**
* Bir hareketin son durumunu silerek bir onceki duruma getirir
*
* @param module
* @param transId
*/
public static void goBack(Module module, int transId) {
List<SqlRow> rowList = Ebean.createSqlQuery("select id, status_id from " + module.name() + "_trans_status_history where trans_id = :trans_id order by id desc")
.setParameter("trans_id", transId)
.setMaxRows(2)
.findList();
if (rowList != null && rowList.size() > 0) {
Ebean.createSqlUpdate("delete from " + module.name() + "_trans_status_history where id = :id ")
.setParameter("id", rowList.get(0).getInteger("id"))
.execute();
Integer statusId = null;
if (rowList.size() > 1) {
statusId = rowList.get(1).getInteger("status_id");
}
setTransStatus(module, transId, statusId);
}
}
/**
* Hareketin son durumunu setler
*
* @param module
* @param transId
* @param statusId
*/
private static void setTransStatus(Module module, Integer transId, Integer statusId) {
Ebean.createSqlUpdate("update " + module.name() + "_trans set status_id = :status_id where id = :id")
.setParameter("id", transId)
.setParameter("status_id", statusId)
.execute();
Ebean.createSqlUpdate("update " + module.name() + "_trans_detail set status_id = :status_id where trans_id = :trans_id")
.setParameter("trans_id", transId)
.setParameter("status_id", statusId)
.execute();
}
}