sequelize / sequelize

Feature-rich ORM for modern Node.js and TypeScript, it supports PostgreSQL (with JSON and JSONB support), MySQL, MariaDB, SQLite, MS SQL Server, Snowflake, Oracle DB (v6), DB2 and DB2 for IBM i.
https://sequelize.org/
MIT License
29.44k stars 4.26k forks source link

TypeError: val.replace is not a function #6914

Closed CFCSystem closed 7 years ago

CFCSystem commented 7 years ago

I'm trying to insert a sale from one MySQL database to another in postgres. I am getting error when I try to insert_parcela.create I'm Brazilian, sorry for my English.

What you are doing?

        synchVendas: (req, res) => {
            let todayDate = moment();

            let guia = undefined;
            let venda = undefined;

            //setar o squema dos models
            sae_models.cnh = sae_models.cnh.schema('saesindcfc');
            sae_models.venda = sae_models.venda.schema('saesindcfc');
            sae_models.venda_itens = sae_models.venda_itens.schema('saesindcfc');
            sae_models.venda_parcela = sae_models.venda_parcela.schema('saesindcfc');
            sae_models.conta_cor = sae_models.conta_cor.schema('saesindcfc');
            sae_models.conta_cor_lan = sae_models.contas_cor_lan.schema('saesindcfc');

            //Associacao das guias com seus items
            sind_models.guia.hasMany(sind_models.guia_items, { otherKey: 'id', foreignKey: 'guia_id' });

            sequelize.transaction({autocommit: false}).then(function (t) {

                //Buscando algum pagamento no sindicado
                return sind_models.guia.findOne({
                    include: [{
                        /* incluir a guia item mas so com os servicos desejados */
                        model: sind_models.guia_items,
                        required: true,
                        where: { servico_id : {$in: req.body.servicos} } //somente servicos requisitados
                    }],
                    where: { renach: req.body.renach, escola: req.body.escola, data_pagamento: { $ne: null } } /*somente do escola+renach requisitado*/
                }).then(result => {
                    //nenhum pagamento
                    if (result == undefined) { //nenhuma guia encontrada nas condicoes
                        throw new Error('Nenhuma guia encontrada');
                    }

                    //atribui a guia local variavel
                    guia = result;
                    //hora de buscar a cnh do aluno em questao
                    return sae_models.cnh.findOne({ where: { renach: 'MS' + result.renach, cod_cliente: result.escola } });
                }).then(cnh => {

                    //depois de achar a cnh ja tem o cod_cnh e cod_aluno
                    //eh criado uma nova venda no nome deste aluno
                    return sae_models.venda.create({
                        data_hora: todayDate.format('MM-DD-YYYY HH:mm:ss'),
                        vlr_total: guia.valor,
                        vlr_entrada: guia.valor,
                        vlr_acresc: 0.0,
                        cod_aluno: cnh.id_cnh,
                        cod_forma_tipo_pagto: 3, //dinheiro
                        cod_tipo_pagto: 1, //dinheiro,
                        cod_cliente: cnh.cod_cliente,
                        status: 1
                    }, {transaction: t});

                }).then(nova_venda => {
                    venda = nova_venda;
                    // a nova venda eh criada e os items sao inseridos um a um de forma sincrona
                    async.each(guia.guia_items, function (item, callback) {
                        //para cada insercao eh necessario atribuir uma id de servico
                        if (getServicosAssoc(item.servico_id) != undefined) {
                            sae_models.venda_itens.create({
                                cod_venda: nova_venda.id,
                                qtde: item.quantidade,
                                cod_servico: getServicosAssoc(item.servico_id),
                                vlr_desconto: 0.0,
                                vlr_juros: 0.0,
                            }, {transaction: t}).then(novo_venda_item => {
                                //novo venda item eh criado
                                console.log('Novo item da venda criado! Cod venda: ' + nova_venda.id + ' cod item:' + novo_venda_item.id);
                                callback();
                            }).catch(err => {
                                console.log('Erro na criacao do item da venda');
                                console.log(err);
                            });

                        } else {/* nenhum item associado */
                            console.log('Nao existe associacao par o servico ' + item.servico_id);
                            callback();
                        }
                    }, function (err) {
                        //no final da insercao dos item é necessario criar uma parcela
                        //a parcela para pagamento posteriormente no caixa
                        // console.log("tipo:" + typeof(t));
                        //  console.log(t instanceof sequelize.Transaction);
                        sae_models.venda_parcela.create({
                            valor: nova_venda.vlr_total,
                            data_venc: todayDate.format('MM-DD-YYYY'),
                            obs: 'sindcfc',
                            cod_form_pgto: 1,
                            cod_venda: nova_venda.id,
                            parcela: 1,
                            data_lancamento: todayDate.format('MM-DD-YYYY'),
                            data_pagamento: guia.data_pagamento,
                            valorAbatido: nova_venda.vlr_total,
                            status: 1
                        }, {transaction: t}).then(nova_parcela => {
                            //realizar o pagamento da nova parcela
                            //inserir conta cor lan e conta cor da venda
                            InsereContaCorLan(t,nova_venda.cod_cliente, nova_parcela.id, nova_venda.vlr_total).then(result => {
                                console.log(result); //quando o resultado eh satisfatorio
                                t.commit();
                            }).catch(err => {
                                console.log(err);//quando ocorre algum erro incomum
                                t.rollback()
                            });
                        });
                    });
                }).catch(err => { /* tratamento de erros */
                    console.log(err);
                    t.rollback()
                });
            });
        }

What do you expect to happen?

Let the installment be created for me to write down the cash table.

What is actually happening?

Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): START TRANSACTION;
Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Executing (default): SELECT `guia`.*, `guia_items`.`guia_id` AS `guia_items.guia_id`, `guia_items`.`servico_id` AS `guia_items.servico_id`, `guia_items`.`quantidade` AS `guia_items.quantidade`, `guia_items`.`valor` AS `guia_items.valor` FROM (SELECT `guia`.`id`, `guia`.`data_emissao`, `guia`.`valor`, `guia`.`escola`, `guia`.`usuario`, `guia`.`renach`, `guia`.`data_pagamento`, `guia`.`hora_emissao`, `guia`.`hora_pagamento`, `guia`.`data_credito`, `guia`.`valor_tarifa`, `guia`.`agencia_arrecadadora`, `guia`.`valor_pago`, `guia`.`convenio`, `guia`.`descricao`, `guia`.`data_vencimento`, `guia`.`acrescimos`, `guia`.`tipo`, `guia`.`status` FROM `guia` AS `guia` WHERE `guia`.`renach` = '831343583' AND `guia`.`escola` = 1 AND `guia`.`data_pagamento` IS NOT NULL AND ( SELECT `guia_id` FROM `guia_items` AS `guia_items` WHERE (`guia_items`.`guia_id` = `guia`.`id` AND `guia_items`.`servico_id` IN (7)) LIMIT 1 ) IS NOT NULL LIMIT 1) AS `guia` INNER JOIN `guia_items` AS `guia_items` ON `guia`.`id` = `guia_items`.`guia_id` AND `guia_items`.`servico_id` IN (7);
Executing (default): SELECT "id_cnh", "data_vncto_ladv", "num_lic_ladv", "def_prov", "numero_", "num_reg", "data_entrega", "data_emissao", "vencto_processo", "data_protocolo", "data_cad", "cat_hab", "habilitacao", "renach", "cod_aluno", "cod_cidade", "cod_usuario", "cod_cliente", "cat_pret1", "cat_pret2", "atividade", "desistente1", "desistente2", "observacao", "outro_cfc", "cidade_sae", "uf_sae", "vencto_cnh", "nr_ordem_sae" FROM "saesindcfc"."cnh" AS "cnh" WHERE "cnh"."renach" = 'MS831343583' AND "cnh"."cod_cliente" = 1 LIMIT 1;
Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): INSERT INTO "saesindcfc"."venda" ("id","data_hora","vlr_total","vlr_entrada","vlr_acresc","cod_aluno","cod_tipo_pagto","cod_forma_tipo_pagto","cod_cliente","status") VALUES (DEFAULT,'11-23-2016 17:26:02',170,170,0,20026,1,3,1,1) RETURNING *;
Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): INSERT INTO "saesindcfc"."venda_itens" ("id","cod_venda","qtde","cod_servico","vlr_desconto","vlr_juros") VALUES (DEFAULT,42,1,2,0,0) RETURNING *;
Novo item da venda criado! Cod venda: 42 cod item:40
Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): INSERT INTO "saesindcfc"."venda_parcela" ("id","valor","data_venc","obs","cod_form_pgto","cod_venda","parcela","data_lancamento","data_pagamento","valorAbatido","status") VALUES (DEFAULT,170,'2016-11-23 03:00:00.000 +00:00','sindcfc',1,42,1,'2016-11-23 03:00:00.000 +00:00','2016-11-15 00:00:00.000 +00:00',170,1) RETURNING *;
TypeError: val.replace is not a function
    at Object.SqlString.escape (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/sql-string.js:61:15)
    at Object.escape (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:978:22)
    at Object.whereItemQuery (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2358:22)
    at /home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1989:25
    at /home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/node_modules/lodash/lodash.js:4389:15
    at baseForOwn (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/node_modules/lodash/lodash.js:2652:24)
    at Function.forOwn (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/node_modules/lodash/lodash.js:12254:24)
    at Object.whereItemsQuery (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1988:9)
    at Object.getWhereConditions (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2423:19)
    at Object.selectQuery (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1529:28)
    at QueryInterface.select (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/query-interface.js:669:25)
    at Model.<anonymous> (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/sequelize/lib/model.js:1398:32)
    at Model.tryCatcher (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/bluebird/js/release/promise.js:510:31)
    at Promise._settlePromise (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/bluebird/js/release/promise.js:567:18)
    at Promise._settlePromise0 (/home/leonardo/Documentos/nodejs/sae-ws/node_modules/bluebird/js/release/promise.js:612:10)
Executing (554c2ab4-672d-4df7-a4c0-78d8e66d849d): ROLLBACK;

Dialect: postgres Database version: 6.1.0 __Sequelize version: 3.25.0

felixfbecker commented 7 years ago

This typically hints at an invalid type being passed where a string is expected

felixfbecker commented 7 years ago

Could be { $ne: null }. Try {$not: null}.

CFCSystem commented 7 years ago

Hello @felixfbecker I changed what you asked for but the error persists. Notice that the error only happens when I try to create a venda_parcela.create.

sae_models.venda_parcela.create({ valor: nova_venda.vlr_total, data_venc: todayDate.format('MM-DD-YYYY'), obs: 'sindcfc', cod_form_pgto: 1, cod_venda: nova_venda.id, parcela: 1, data_lancamento: todayDate.format('MM-DD-YYYY'), data_pagamento: guia.data_pagamento, valorAbatido: nova_venda.vlr_total, status: 1 }, {transaction: t})

CFCSystem commented 7 years ago

Hello everyone, the error was in the InsereContaCorLan method. This method performs a function to insert a posting .. the call of this method was with inverted parameters .. I executed the code step by step and found.