using RM.Eai.TotvsMessage.Intf;
using RM.Eai.TotvsMessage.IService;
using RM.Eai.TotvsMessage.Lib;
using RM.Lib;
using RM.Lib.Data;
using RM.Lib.Server;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace RM.Eai.TotvsMessage.Adapter
{
[AdapterAttr("COSTCENTER", "2.000")]
public class CostCenter_Receive_2000 : AdapterDataServerBase
{
public CostCenter_Receive_2000(EAIContextItem contextItem, DbServices dbs)
: base(contextItem, dbs)
{
}
protected override void DoChangeRMContext(EAIChangeRMContextDataServerParms parms)
{
int codColigada;
int codFilial;
GetColigadaFilial(this.ContextItem.CurrentRoute.IdApp, out codColigada, out codFilial);
if (codColigada > -1)
parms.Context.CodColigada = codColigada;
if (codFilial > -1)
parms.Context.CodFilial = codFilial;
}
protected override EAIExecDataServerResult DoExecuteDataServer(EAIExecDataServerParams parms)
{
EAIExecDataServerResult result = new EAIExecDataServerResult();
if (parms.DataSet.Tables.Contains("GCcusto"))
{
DataTable dtCcustoMensagem = parms.DataSet.Tables["GCCusto"];
IRMSDataServer dataServer = this.APIDataServer.CreateDataServer("CtbCCustoData", CodSistema.Ctb);
((RMSDataServer)dataServer).DBS = this.DBS;
DataSet dsSchemaDataServer = dataServer.ReadSchema(this.ContextItem.RMContext, null);
//Percorre todas as linhas da tabela GCCusto da mensagem.
foreach (DataRow rGCCustoMensagen in dtCcustoMensagem.Rows)
{
rGCCustoMensagen["CODCOLIGADA"] = this.ContextItem.RMContext.CodColigada;
Object[] _pkReadRecord = null;
//Recupera os valores da chave primaria do Rm baseado na tabela de De/Para
_pkReadRecord = this.APIDataServer.GetPKValuesByDePara(rGCCustoMensagen[EAIConsts.ctINTERNALID].ToString(), this.ContextItem.CurrentRoute.IdApp,
"GCCusto", dsSchemaDataServer.Tables["GCCusto"].PrimaryKey);
if ((this.ContextItem.Message.EventType == EventTypeEnum.teDelete) && (_pkReadRecord == null))
this.NotifyLogError(null, Properties.Resource1.SEaiNaoFoiEncontradoRegistroParaDeletar);
//Retorna o dataSet contendo dados do registro a ser alterado/excluído/incluído
DataSet dsDataServer = this.APIDataServer.ReadRecord(dataServer, this.ContextItem.RMContext, _pkReadRecord, null);
//Adiciona a coluna InternalId em todas as tabelas do dataSet a ser enviado para o dataServer.
foreach (DataTable dtDataServer in dsDataServer.Tables)
dtDataServer.Columns.Add(EAIConsts.ctINTERNALID, typeof(string));
//Copia dados da tabela GCCusto da mensagem para a tabela GCusto do dataServer.
dsDataServer.Tables["GCCusto"].BeginLoadData();
try
{
this.APIDataServer.CopyDataRow(rGCCustoMensagen, dsDataServer.Tables["GCCusto"], _pkReadRecord);
}
finally
{
dsDataServer.Tables["GCCusto"].EndLoadData();
}
if (this.ContextItem.Message.EventType == EventTypeEnum.teDelete)
{//Trata-se de exclusão de registros.
if (_pkReadRecord != null)
{
foreach (DataRow row in dsDataServer.Tables["GCCusto"].Rows)
{
EAIMsgDeParaItem deParaItem = this.APIDataServer.GetDeParaItem(row[EAIConsts.ctINTERNALID].ToString(), dsDataServer.Tables["GCCusto"].TableName,
this.ContextItem.CurrentRoute.IdApp, row, "COSTCENTER", dsDataServer.Tables["GCCusto"].PrimaryKey);
result.DeParas.Add(deParaItem);
}
foreach (DataRow r in dsDataServer.Tables["GCCusto"].Rows)
r.Delete();
int rowsAffect = this.APIDataServer.SaveRecord(dataServer, this.ContextItem.RMContext, ref dsDataServer, null);
if (rowsAffect <= 0)
result.DeParas.Clear();
}
}
else
{
int rowsAffect = this.APIDataServer.SaveRecord(dataServer, this.ContextItem.RMContext, ref dsDataServer, null);
if (rowsAffect > 0)
{
foreach (DataRow row in dsDataServer.Tables["GCCusto"].Rows)
{
EAIMsgDeParaItem deParaItem = this.APIDataServer.GetDeParaItem(row[EAIConsts.ctINTERNALID].ToString(), dsDataServer.Tables["GCCusto"].TableName,
this.ContextItem.CurrentRoute.IdApp, row, "COSTCENTER", dsDataServer.Tables["GCCusto"].PrimaryKey);
result.DeParas.Add(deParaItem);
}
}
}
}
}
return result;
}
protected override void DoReplicate(EAIReplicateDataServerParms parms)
{
}
protected override EAITransformDataServerResult DoTransform(EAITransformDataServerParms parms)
{
EAITransformDataServerResult result = new EAITransformDataServerResult();
string xslt = this.DBS.QueryValue(string.Empty,
@" select XSLTENTRADA from HCTRANSFORMACAO (nolock)
where TRANSACTIONID = 'costcenter'
and VERSAO = '2.000' ", null).ToString();
string str = XMLUtils.TransformXSLByXSLT(parms.BusinessContent, xslt);
result.XmlTranformed = str;
return result;
}
protected override void DoUpdateDePara(EAIUpdateDeParaParms parms)
{
foreach (EAIMsgDeParaItem depara in parms.DeParasInfo.DeParas)
{
this.APIDePara.SaveDePara(this.ContextItem.RMContext.CodUsuario, depara);
}
}
}
}
|