public async Task <IEnumerable <CampanhaProdutoFase> > GetAllVoltsAsync(int campanhaId, string carteira, int produtoId, int campanhaFaseId, FaixaMeta faixaMeta) { const string sql = @"SELECT * FROM CPR_CAMPANHA_PRODUTO_FASE PF (NOLOCK) INNER JOIN CPR_CAMPANHA_FASE (NOLOCK) CF ON PF.CPR_CAMPANHA_FASE_ID = CF.CPR_CAMPANHA_FASE_ID INNER JOIN CPR_CAMPANHA_PRODUTO CP (NOLOCK) ON PF.CPR_CAMPANHA_PRODUTO_ID = CP.CPR_CAMPANHA_PRODUTO_ID INNER JOIN WMS_PRODUTO P (NOLOCK) ON CP.WMS_PRODUTO_ID = P.PRODUTO_ID INNER JOIN WMS_PRODUTO_EQUIVALENCIA (NOLOCK) EQ ON P.PRODUTO_ID IN (EQ.PRODUTO_ID_PRINCIPAL,EQ.PRODUTO_ID_EQUIVALENTE) AND EQ.PRODUTO_ID_PRINCIPAL <> EQ.PRODUTO_ID_EQUIVALENTE WHERE CF.CPR_CAMPANHA_ID = @campanhaId AND PF.CPR_CAMPANHA_FASE_ID = @campanhaFaseId AND EQ.PRODUTO_ID_PRINCIPAL = @produtoId AND PF.FAIXA_META = @faixaMeta AND PF.CARTEIRA = @carteira AND PF.VOLTAGEM IS NOT NULL AND NOT EXISTS (SELECT TOP 1 1 FROM CPR_CAMPANHA_PRODUTO_FASE (NOLOCK) A INNER JOIN CPR_CAMPANHA_FASE (NOLOCK) B ON A.CPR_CAMPANHA_FASE_ID = B.CPR_CAMPANHA_FASE_ID WHERE A.CPR_CAMPANHA_PRODUTO_ID = PF.CPR_CAMPANHA_PRODUTO_ID AND B.CPR_CAMPANHA_ID = CF.CPR_CAMPANHA_ID AND B.CPR_CAMPANHA_FASE_ID = PF.CPR_CAMPANHA_FASE_ID AND A.FAIXA_META = PF.FAIXA_META AND A.CATALOGO = PF.CATALOGO AND A.CARTEIRA = PF.CARTEIRA AND A.VOLTAGEM <> PF.VOLTAGEM );" ; var p = new { campanhaId, campanhaFaseId, produtoId, carteira = new DbString() { Value = faixaMeta.ToString(), Length = 60, IsAnsi = true }, faixaMeta = new DbString() { Value = faixaMeta.ToString(), Length = 80, IsAnsi = true } }; return(await this.Connection.SqlConnection.QueryAsync <CampanhaProdutoFase, CampanhaFase, CampanhaProduto, Produto, CampanhaProdutoFase>(sql, map : (produtoFase, fase, campanhaProduto, produto) => { campanhaProduto.Produto = produto; produtoFase.CampanhaFase = fase; produtoFase.CampanhaProduto = campanhaProduto; return produtoFase; }, splitOn : "CPR_CAMPANHA_PRODUTO_FASE_ID,CPR_CAMPANHA_FASE_ID,CPR_CAMPANHA_PRODUTO_ID,PRODUTO_ID", param : p)); }
public async Task <IEnumerable <CampanhaProdutoFase> > GetAllCurrentProductsAsync(int campanhaId, string carteira, int campanhaFaseId, FaixaMeta faixaMeta) { const string sql = @"SELECT * FROM CPR_CAMPANHA_PRODUTO_FASE PF (NOLOCK) INNER JOIN CPR_CAMPANHA_FASE (NOLOCK) CF ON PF.CPR_CAMPANHA_FASE_ID = CF.CPR_CAMPANHA_FASE_ID INNER JOIN CPR_CAMPANHA_PRODUTO CP (NOLOCK) ON PF.CPR_CAMPANHA_PRODUTO_ID = CP.CPR_CAMPANHA_PRODUTO_ID INNER JOIN WMS_PRODUTO P (NOLOCK) ON CP.WMS_PRODUTO_ID = P.PRODUTO_ID INNER JOIN CPR_CAMPANHA C (NOLOCK) ON CF.CPR_CAMPANHA_ID = C.CPR_CAMPANHA_ID WHERE C.CPR_CAMPANHA_ID = @campanhaId AND GETDATE() BETWEEN C.DT_INICIO AND C.DT_FIM AND PF.CPR_CAMPANHA_FASE_ID >= @campanhaFaseId AND C.ATIVO = 1 AND PF.CARTEIRA = @carteira AND PF.FAIXA_META = @faixaMeta AND (PF.VOLTAGEM IS NULL OR EXISTS(SELECT TOP 1 1 FROM WMS_PRODUTO_EQUIVALENCIA EQ WHERE P.PRODUTO_ID = EQ.PRODUTO_ID_EQUIVALENTE AND EQ.PRODUTO_ID_PRINCIPAL = P.PRODUTO_ID)) ORDER BY PF.PERIODO, P.NOME;"; var p = new { campanhaId, carteira = new DbString() { Value = carteira, Length = 80, IsAnsi = true }, campanhaFaseId, faixaMeta = new DbString() { Value = faixaMeta.ToString(), Length = 80, IsAnsi = true } }; return(await this.Connection.SqlConnection.QueryAsync <CampanhaProdutoFase, CampanhaFase, CampanhaProduto, Produto, Campanha, CampanhaProdutoFase>(sql, map : (produtoFase, fase, campanhaProduto, produto, campanha) => { campanhaProduto.Produto = produto; produtoFase.CampanhaFase = fase; produtoFase.CampanhaFase.Campanha = campanha; produtoFase.CampanhaProduto = campanhaProduto; return produtoFase; }, splitOn : "CPR_CAMPANHA_PRODUTO_FASE_ID,CPR_CAMPANHA_FASE_ID,CPR_CAMPANHA_PRODUTO_ID,PRODUTO_ID,CPR_CAMPANHA_ID", param : p)); }