package sn.unitech.stock.bean;
import java.io.Serializable;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import sn.unitech.common.dao.ReadProperties;
import sn.unitech.stock.entity.Commande;
import sn.unitech.stock.entity.DetailCommand;
import sn.unitech.stock.entity.DetailCommandId;
import sn.unitech.stock.entity.Stock;
import sn.unitech.stock.entity.SysAdherent;
import sn.unitech.stock.entity.SysProdCarac;
import sn.unitech.stock.entity.SysProduit;
import sn.unitech.stock.metier.CommandeM;
import sn.unitech.stock.metier.iface.ICommandeM;
@ManagedBean
@ViewScoped
@SuppressWarnings("unchecked")
public class CommandeBean implements Serializable{
private static final long serialVersionUID = -8117331468826538239L;
private static final String NAV_RAPPORT_BON_DE_COMMANDE ="/stock/report/template/bonCommande.xhtml";
private ICommandeM commandeM= new CommandeM();
private ReadProperties readProperties=ReadProperties.getReadProperties();
private Stock stock=new Stock();
private SysProduit sysProduit=new SysProduit();
private DetailCommand detailCommand= new DetailCommand();
private Commande commande=new Commande();
private AllRefs allRefs =new AllRefs();
private CMessages cmessages =new CMessages();
private CItems citems=new CItems();
private Cproperties cproperties=citems;
public CommandeBean() {
}
public Commande getCommandeSS() {
return (Commande) ToolsBean.getToolsBean().getAttribute(ToolsBean.CURRENT_COMMANDE);
}
ParamsUser getParamsUser(){ //alias
return ((ParamsUser)ToolsBean.getToolsBean().getAttribute(ToolsBean.idParamUser));
}
public List<SysProduit> getModelProduit(){
return (List<SysProduit>) this.citems.dataProduit.getWrappedData();
}
public List<DetailCommand> getModelDetailCommande(){
return (List<DetailCommand>) this.citems.dataDetailCommand.getWrappedData();
}
public void findEtiquette(ActionEvent e){
if((this.cproperties.etiquette!=null)&&(!this.cproperties.etiquette.isEmpty())){
List<SysProduit> lp= (List<SysProduit>) this.getModelProduit();
int index;
if((index=this.commandeM.getIndex(lp, this.cproperties.etiquette))!=-1){
SysProduit produit=lp.get(index);
produit.setSelected(true);
lp.remove(index);
lp.add(0, produit);
}
}
}
public Commande getCommande() {
return commande;
}
public void setCommande(Commande commande) {
this.commande = commande;
}
public void initProduit(ActionEvent event){
this.citems.dataProduit=null;
this.cproperties.idProduit="";
this.cproperties.designation="";
}
public void addSelectedProduit(ActionEvent event){
DataModel<SysProduit> dataProduit=this.citems.getDataProduit();
for(int i=0;i<dataProduit.getRowCount();i++){
dataProduit.setRowIndex(i);
this.sysProduit=dataProduit.getRowData();
if(this.sysProduit.isSelected()){
detailCommand= new DetailCommand();
detailCommand.setSysUniteByCodUnitc(sysProduit.getSysUniteByCodUnitc());
detailCommand.setSysUniteByCodUnitd(sysProduit.getSysUniteByCodUnitd());
detailCommand.setPrixUnitc(sysProduit.getPrixAquisition());
detailCommand.setPrixUnitd(0d);
if(sysProduit.getQteOpti()-sysProduit.getQntContenant()>-1)
detailCommand.setQteContenant(sysProduit.getQteOpti()-sysProduit.getQntContenant());
detailCommand.setQteDetail(0);
this.cproperties.setUseDetail(Boolean.parseBoolean(sysProduit.getUseDetail()));
detailCommand.setId(new DetailCommandId());
detailCommand.setSysProduit(sysProduit);
detailCommand.setSysAdherent(new SysAdherent(this.getParamsUser().adherent.getIdAdherent()));
detailCommand.setCodFourn(Integer.parseInt(this.cproperties.idFournisseur));
detailCommand.setCodUser(getParamsUser().sysUser.getId().getIdUser());
this.getModelDetailCommande().add(detailCommand);
}
}
this.citems.dataProduit=null;
}
public void deleteDetailCommand(){
this.getModelDetailCommande().remove(this.citems.dataDetailCommand.getRowData());
}
public void saveCommande(){
if(this.getModelDetailCommande().size()>0){
this.cproperties.testSiValeurSaisi=false;
this.cproperties.prixTotal=new Double(0);
for(int i=0;i<this.getModelDetailCommande().size();i++){
this.cproperties.prixTotal=this.cproperties.prixTotal+this.getModelDetailCommande().get(i).getPrixTot();
if(this.getModelDetailCommande().get(i).getQteContenant()<(new Double(1))){
this.cproperties.testSiValeurSaisi=false;
break;
}else this.cproperties.testSiValeurSaisi=true;
}
if(this.cproperties.testSiValeurSaisi){
commande.setMontTot(this.cproperties.prixTotal);
try {
this.commande.setSysTime(ToolsBean.getToolsBean().getSdfHeure().parse(""+ToolsBean.getToolsBean().getSdfHeure().format(new Date())));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(this.commandeM.saveCommande(this.getModelDetailCommande(),commande)){
this.citems.dataDetailCommand.setWrappedData(new ArrayList<DetailCommand>());
this.commande=new Commande();
this.cproperties.prixTotal=new Double(0);
this.cmessages.setSaveMessage(ToolsBean.getToolsBean().getBundleMessage("msgSucces"));
}else this.cmessages.setSaveMessage(ToolsBean.getToolsBean().getBundleMessage("msgEchec"));
}else this.cmessages.setSaveMessage("Veuillez revoir les quantites saisies du produit ");
}
}
public void desactiveDetail(ActionEvent e){
this.citems.dataDetailCommand.getRowData().getSysProduit().setDesactiveDetail(false);
}
public void detailProduit(){
int currentIndex=this.citems.dataProduit.getRowIndex();
if((this.cproperties.getLastIndex()!=-1)&&(this.cproperties.getLastIndex()!= currentIndex)){
this.citems.dataProduit.setRowIndex(this.cproperties.getLastIndex());
this.citems.dataProduit.getRowData().setListCaracterist(null);
this.citems.dataProduit.getRowData().setLabelDetail(ToolsBean.lblDetail);
}
this.citems.dataProduit.setRowIndex(currentIndex);
SysProduit produit=this.citems.dataProduit.getRowData();
if(produit.getLabelDetail().equals(ToolsBean.lblFermer)){
produit.setListCaracterist(null);
produit.setLabelDetail(ToolsBean.lblDetail);
}
else{
this.cproperties.idProduit=produit.getIdProduit()+"";
produit.setListCaracterist(this.citems.getListCaracDuProd());
if((produit.getListCaracterist()!=null)&&(produit.getListCaracterist().size()>0))
produit.setLabelDetail(ToolsBean.lblFermer);
}
this.cproperties.setLastIndex(currentIndex);
this.cproperties.designation=produit.getDesignation();
}
public String printCommande(){
Commande commande=this.citems.dataListCommande.getRowData();
this.cproperties.idCommand=commande.getIdCommand();
commande.setListDetailDuCommand(this.citems.getListDetailCommand());
ToolsBean.getToolsBean().setAttribute(ToolsBean.getToolsBean().CURRENT_COMMANDE,commande);
return NAV_RAPPORT_BON_DE_COMMANDE;
}
public void afficheDetailCommand(){
int currentIndex=this.citems.dataListCommande.getRowIndex();
if((this.cproperties.getLastIndexDetail()!=-1)&&(this.cproperties.getLastIndexDetail()!= currentIndex)){
this.citems.dataListCommande.setRowIndex(this.cproperties.getLastIndexDetail());
this.citems.dataListCommande.getRowData().setListDetailDuCommand(null);
this.citems.dataListCommande.getRowData().setLabelDetail(ToolsBean.lblDetail);
}
this.citems.dataListCommande.setRowIndex(currentIndex);
Commande commande=this.citems.dataListCommande.getRowData();
if(commande.getLabelDetail().equals(ToolsBean.lblFermer)){
commande.setListDetailDuCommand(null);
commande.setLabelDetail(ToolsBean.lblDetail);
}
else{
this.cproperties.idCommand=commande.getIdCommand();
commande.setListDetailDuCommand(this.citems.getListDetailCommand());
if((commande.getListDetailDuCommand()!=null)&&(commande.getListDetailDuCommand().size()>0))
commande.setLabelDetail(ToolsBean.lblFermer);
}
this.cproperties.setLastIndexDetail(currentIndex);
}
public void clickOngletConsultation(ActionEvent e){
this.citems.dataListCommande=null;
}
public void clickAnnuler(ActionEvent e){
((List<DetailCommand>) this.citems.dataDetailCommand.getWrappedData()).clear();
}
public AllRefs getAllRefs() {
return allRefs;
}
public void setAllRefs(AllRefs allRefs) {
this.allRefs = allRefs;
}
public CMessages getCmessages() {
return cmessages;
}
public void setCmessages(CMessages cmessages) {
this.cmessages = cmessages;
}
public CItems getCitems() {
return citems;
}
public void setCitems(CItems citems) {
this.citems = citems;
}
public Cproperties getCproperties() {
return cproperties;
}
public void setCproperties(Cproperties cproperties) {
this.cproperties = cproperties;
}
public Stock getStock() {
return stock;
}
public void setStock(Stock stock) {
this.stock = stock;
}
public SysProduit getSysProduit() {
return sysProduit;
}
public void setSysProduit(SysProduit sysProduit) {
this.sysProduit = sysProduit;
}
public DetailCommand getDetailCommand() {
return detailCommand;
}
public void setDetailCommand(DetailCommand detailCommand) {
this.detailCommand = detailCommand;
}
public class AllRefs implements Serializable{
HtmlInputText refEtiquette=new HtmlInputText();
public HtmlInputText getRefEtiquette() {
return refEtiquette;
}
public void setRefEtiquette(HtmlInputText refEtiquette) {
this.refEtiquette = refEtiquette;
}
}
public class CMessages implements Serializable{
public String saveMessage;
public String getSaveMessage() {
return saveMessage;
}
public void setSaveMessage(String saveMessage) {
this.saveMessage = saveMessage;
}
}
public class Cproperties implements Serializable{
String idFournisseur;
String idFamilleProd;
String idProduit;
String uniteQuantite;
String uniteDetailQuantite;
boolean useDetail;
Double prixTotal;
boolean testSiValeurSaisi;
public String etiquette;
public String designation;
private int lastIndex=-1;
private int lastIndexDetail=-1;
int idCommand;
Cproperties (){
prixTotal=new Double(0);
}
public String getEtiquette() {
return etiquette;
}
public void setEtiquette(String etiquette) {
this.etiquette = etiquette;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getIdFournisseur() {
return idFournisseur;
}
public void setIdFournisseur(String idFournisseur) {
this.idFournisseur = idFournisseur;
}
public String getIdFamilleProd() {
return idFamilleProd;
}
public void setIdFamilleProd(String idFamilleProd) {
this.idFamilleProd = idFamilleProd;
}
public String getIdProduit() {
return idProduit;
}
public void setIdProduit(String idProduit) {
this.idProduit = idProduit;
}
public String getUniteQuantite() {
return uniteQuantite;
}
public void setUniteQuantite(String uniteQuantite) {
this.uniteQuantite = uniteQuantite;
}
public String getUniteDetailQuantite() {
return uniteDetailQuantite;
}
public void setUniteDetailQuantite(String uniteDetailQuantite) {
this.uniteDetailQuantite = uniteDetailQuantite;
}
public boolean isUseDetail() {
return useDetail;
}
public void setUseDetail(boolean useDetail) {
this.useDetail = useDetail;
}
public Double getPrixTotal() {
return prixTotal;
}
public void setPrixTotal(Double prixTotal) {
this.prixTotal = prixTotal;
}
public boolean isTestSiValeurSaisi() {
return testSiValeurSaisi;
}
public void setTestSiValeurSaisi(boolean testSiValeurSaisi) {
this.testSiValeurSaisi = testSiValeurSaisi;
}
public int getLastIndex() {
return lastIndex;
}
public void setLastIndex(int lastIndex) {
this.lastIndex = lastIndex;
}
public int getLastIndexDetail() {
return lastIndexDetail;
}
public void setLastIndexDetail(int lastIndexDetail) {
this.lastIndexDetail = lastIndexDetail;
}
public int getIdCommand() {
return idCommand;
}
public void setIdCommand(int idCommand) {
this.idCommand = idCommand;
}
}
public class CItems extends Cproperties implements Serializable{
Map<String,String> itemsFournisseur;
Map<String,String> itemsFamilleProd;
List<SysProdCarac> listCaracDuProd=new ArrayList<SysProdCarac>();
DataModel<DetailCommand> dataDetailCommand=new ListDataModel<DetailCommand>(new ArrayList<DetailCommand>());
DataModel<SysProduit> dataProduit;
DataModel<Commande> dataListCommande=new ListDataModel<Commande>(new ArrayList<Commande>());
List<DetailCommand> listDetailCommand=new ArrayList<DetailCommand>();
DataModel<Stock> dataListAlerte=new ListDataModel<Stock>(new ArrayList<Stock>());
public CItems(){
/* itemsFamilleProd=commandeM.findGroupProd(readProperties.read("Commande.jpqlFamilleProd"),ToolsBean.getToolsBean().defaultParametter());
if((this.itemsFamilleProd!=null)&&(this.itemsFamilleProd.size()>0))
this.setIdFamilleProd(itemsFamilleProd.values().iterator().next());
*/
this.setIdFamilleProd("%");
}
public Map<String, String> getItemsFournisseur() {
itemsFournisseur=commandeM.findAllFournisseur(readProperties.read("Commande.jpqlFournisseur"),ToolsBean.getToolsBean().defaultParametter());
return itemsFournisseur;
}
public void setItemsFournisseur(Map<String, String> itemsFournisseur) {
this.itemsFournisseur = itemsFournisseur;
}
public Map<String, String> getItemsFamilleProd() {
itemsFamilleProd=commandeM.findGroupProd(readProperties.read("Commande.jpqlFamilleProd"),ToolsBean.getToolsBean().defaultParametter());
return itemsFamilleProd;
}
public void setItemsFamilleProd(Map<String, String> itemsFamilleProd) {
this.itemsFamilleProd = itemsFamilleProd;
}
public List<SysProduit> getItemsProduit() {
if((this.idFamilleProd!=null)&&(!this.idFamilleProd.isEmpty())){
ParamsUser paramUser=getParamsUser();
paramUser.parametters.clear();
try{
paramUser.parametters.put(0,Integer.parseInt(this.getIdFamilleProd()));
}catch(Exception e){
ParamsUser paramUserAll=getParamsUser();
paramUserAll.parametters.clear();
paramUserAll.parametters.put(0,getParamsUser().adherent.getIdAdherent());
return commandeM.findListProduit(readProperties.read("Commande.jpqlProduitByAllGroupProd"),paramUserAll.parametters,(List<DetailCommand>)this.dataDetailCommand.getWrappedData());
}
return commandeM.findListProduit(readProperties.read("Commande.jpqlProduitByIdGroupProd"), paramUser.parametters,(List<DetailCommand>)this.dataDetailCommand.getWrappedData());
}else return new ArrayList<SysProduit>();
}
public List<SysProdCarac> getListCaracDuProd() {
if((this.idProduit!=null)&&(!this.idProduit.isEmpty())){
ParamsUser paramUser=getParamsUser();
paramUser.parametters.clear();
paramUser.parametters.put(0,Integer.parseInt(this.getIdProduit()));
this.listCaracDuProd=commandeM.listProdCarac(readProperties.read("Commande.jpqlProdCarac"),paramUser.parametters);
return listCaracDuProd;
}else return null;
}
public void setListCaracDuProd(List<SysProdCarac> listCaracDuProd) {
this.listCaracDuProd = listCaracDuProd;
}
public DataModel<SysProduit> getDataProduit() {
if(this.dataProduit==null){
this.dataProduit=new ListDataModel<SysProduit>(this.getItemsProduit());
}
return this.dataProduit;
}
public void setDataProduit(DataModel<SysProduit> dataProduit) {
this.dataProduit = dataProduit;
}
public DataModel<DetailCommand> getDataDetailCommand() {
return dataDetailCommand;
}
public void setDataDetailCommand(DataModel<DetailCommand> dataDetailCommand) {
this.dataDetailCommand = dataDetailCommand;
}
public DataModel<Commande> getDataListCommande() {
if(this.dataListCommande==null){
this.dataListCommande=new ListDataModel<Commande>(new ArrayList<Commande>());
Map<Integer,Object> param=new HashMap<Integer, Object>();
param.put(0,getParamsUser().sysUser.getId().getIdUser());
param.put(1,getParamsUser().adherent.getIdAdherent());
dataListCommande.setWrappedData((List<Commande>) commandeM.listCommande(readProperties.read("Commande.jpqlListCommande"), param));
}
return dataListCommande;
}
public void setDataListCommande(DataModel<Commande> dataListCommande) {
this.dataListCommande = dataListCommande;
}
public List<DetailCommand> getListDetailCommand() {
ParamsUser paramUser=getParamsUser();
paramUser.parametters.clear();
paramUser.parametters.put(0,this.getIdCommand());
this.listDetailCommand=commandeM.listDetailCommand(readProperties.read("Commande.jpqllistDetailCommand"),paramUser.parametters);
return listDetailCommand;
}
public void setListDetailCommand(List<DetailCommand> listDetailCommand) {
this.listDetailCommand = listDetailCommand;
}
public DataModel<Stock> getDataListAlerte() {
this.dataListAlerte.setWrappedData((List<Stock>)commandeM.listAlerte(readProperties.read("Commande.jpqlListAlerte"),ToolsBean.getToolsBean().defaultParametter()));
return dataListAlerte;
}
public void setDataListAlerte(DataModel<Stock> dataListAlerte) {
this.dataListAlerte = dataListAlerte;
}
}
}