var mapper = mapperFactory.createMapperMult(["EstProdPrecificacaoMetaMargem"]);

var alterarFabricantes = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdFabric': message.get('itens').get(i).get('cdFabric'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarFabricantes", param);
        }
    }

    if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdFabric': message.get('itens').get(i).get('cdFabric'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirFabricantes", param);
        }
    }

    if(message.get('acao') == 2)
       this.mapper.update("EstProdPrecificacaoMetaMargem.excluirFabricantes", {'cdEmp': message.get('cdEmp'), 'cdGrupo': message.get('cdGrupo')});

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdFabric': message.get('itens').get(i).get('cdFabric'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirFabricantes", param);
        }
    }
};

var alterarLinhas = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercLinha': message.get('itens').get(i).get('cdArvMercLinha'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarLinhas", param);
        }
    }

     if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercLinha': message.get('itens').get(i).get('cdArvMercLinha'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirLinhas", param);
        }
    }

    if(message.get('acao') == 2)
        this.mapper.update("EstProdPrecificacaoMetaMargem.excluirLinhas", {'cdEmp': message.get('cdEmp'), 'cdGrupo': message.get('cdGrupo')});

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdArvMercLinha': message.get('itens').get(i).get('cdArvMercLinha'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirLinhas", param);
        }
    }
};

var alterarCategorias = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercCateg': message.get('itens').get(i).get('cdArvMercCateg'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarCategorias", param);
        }
    }

    if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercCateg': message.get('itens').get(i).get('cdArvMercCateg'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirCategorias", param);
        }
    }

    if(message.get('acao') == 2)
        this.mapper.update("EstProdPrecificacaoMetaMargem.excluirCategorias", {'cdEmp': message.get('cdEmp'), 'cdGrupo': message.get('cdGrupo')});

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdArvMercCateg': message.get('itens').get(i).get('cdArvMercCateg'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirCategorias", param);
        }
    }
};

var alterarMarcas = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdMc': message.get('itens').get(i).get('cdMc'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarMarcas", param);
        }
    }

    if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdMc': message.get('itens').get(i).get('cdMc'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirMarcas", param);
        }
    }

    if(message.get('acao') == 2)
        this.mapper.update("EstProdPrecificacaoMetaMargem.excluirMarcas", message);

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdMc': message.get('itens').get(i).get('cdMc'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirMarcas", param);
        }
    }
};

var alterarFamilias = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercFamilia': message.get('itens').get(i).get('cdArvMercFamilia'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarFamilias", param);
        }
    }

    if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercFamilia': message.get('itens').get(i).get('cdArvMercFamilia'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirFamilias", param);
        }
    }

    if(message.get('acao') == 2)
        this.mapper.update("EstProdPrecificacaoMetaMargem.excluirFamilias", message);

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdArvMercFamilia': message.get('itens').get(i).get('cdArvMercFamilia'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirFamilias", param);
        }
    }
};

var alterarProdutos = function(){
    if(message.get('acao') == 4){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdArvMercFamilia': message.get('itens').get(i).get('cdArvMercFamilia'),
                'cdGrupo': message.get('cdGrupo'),
                'percMargem':  message.get('itens').get(i).get('percMargem'),
                'percVariacaoAumento':  message.get('itens').get(i).get('percVariacaoAumento')
            };
            this.mapper.update("EstProdPrecificacaoMetaMargem.elterarProdutos", param);
        }
    }


    if(message.get('acao') == 3){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdProd': message.get('itens').get(i).get('cdProd'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.excluirProdutos", param);
        }
    }

    if(message.get('acao') == 2)
        this.mapper.update("EstProdPrecificacaoMetaMargem.excluirProdutos", message);

    if(message.get('acao') == 1 || message.get('acao') == 2){
        for(let i = 0; i<message.get('itens').size(); i++){
            let param = {
                'cdEmp': message.get('cdEmp'),
                'cdUsu': message.get('cdUsu'),
                'cdProd': message.get('itens').get(i).get('cdProd'),
                'cdGrupo': message.get('cdGrupo')
            };
            this.mapper.insert("EstProdPrecificacaoMetaMargem.incluirProdutos", param);
        }
    }
};

try{

    if(message.get('atributo') == 'fabricantes'){
        alterarFabricantes();
    }else if(message.get('atributo') == 'linhas'){
        alterarLinhas();
    }else if(message.get('atributo') == 'categorias'){
        alterarCategorias();
    }else if(message.get('atributo') == 'marcas'){
        alterarMarcas();
    }else if(message.get('atributo') == 'familias'){
        alterarFamilias();
    }else if(message.get('atributo') == 'produtos'){
        alterarProdutos();
    }

    mapper.update('EstProdPrecificacaoMetaMargem.alterarDataDeAlteracao', message);

    mapper.commit();
}catch(err){
    mapper.rollback();
    if(err.code){
        throw JSON.stringify(err);
    }else{
        throw err;
    }
}