public override long loadFromDB(string key, UserObjectFactory oFactory) { long ret = 0; try { DBFacade db = DBFacade.getInstance(); //busca os estagios Recordset rs = db.Query( "SELECT APST.Code " + "FROM [@SB1_APPROVAL] APRV " + "INNER JOIN [@SB1_APPROVAL_STAGE] APST " + "ON APRV.Code = APST.U_ApprovalCode " + "WHERE APRV.Code = " + key ); while (!rs.EoF) { ApprovalStage aps = new ApprovalStage(); aps.loadFromDB((string)rs.Fields.Item("Code").Value, oFactory); stages.AddLast(new LinkedListNode <ApprovalStage>(aps)); rs.MoveNext(); } //busca as condicoes rs = db.Query( "SELECT APCD.Code " + "FROM [@SB1_APPROVAL] APRV " + "INNER JOIN [@SB1_APPROVAL_CONDITION] APCD " + "ON APRV.Code = APCD.U_ApprovalCode " + "WHERE APRV.Code = " + key ); while (!rs.EoF) { ApprovalCondition ac = new ApprovalCondition(); ac.loadFromDB((string)rs.Fields.Item("Code").Value, oFactory); conditions.AddLast(new LinkedListNode <ApprovalCondition>(ac)); rs.MoveNext(); } long r = base.loadFromDB(key, oFactory); isActive = (string)userTable.UserFields.Fields.Item("U_isActive").Value; } catch (Exception e) { ret = -1; } return(ret); }
public void removeBusinessPartners(string filter) { try { string query = "select CardCode FROM OCRD"; if (filter.Length > 0) { query += " WHERE " + filter; } Recordset rs = dbFacade.Query(query); int countRem = 0; if (rs.RecordCount > 0) { int opt = uiUtils.MessageBox("Poderão ser removidos " + rs.RecordCount + " Parceiros de Negócio. Tem certeza que deseja continuar?", 1, "Remover", "Cancelar"); if (opt == 1) { //Start the progress bar ProgressBar oProgBar = connection.App.StatusBar.CreateProgressBar("Progress Bar", rs.RecordCount, true); BusinessPartners bp = connection.Company.GetBusinessObject(BoObjectTypes.oBusinessPartners); while (!rs.EoF) { bp.GetByKey(rs.Fields.Item("CardCode").Value); string remText = bp.CardCode + " - " + bp.CardName; int rem = bp.Remove(); //vai para o proximo registro rs.MoveNext(); if (rem == 0) { countRem++; Logger.getInstance().log("Remoção de BP: Removido: " + remText, Logger.LogType.INFO, null, false); oProgBar.Text = "Removido: " + remText; //avanca a progress bar oProgBar.Value += 1; } else { remText += " Não pode ser removido: " + connection.Company.GetLastErrorCode() + " - " + connection.Company.GetLastErrorDescription(); Logger.getInstance().log("Remoção de BP: " + remText, Logger.LogType.WARNING, null, false); } } oProgBar.Stop(); uiUtils.MessageBox("Foram Removidos " + countRem + " Parceiros de Negócio."); } } else { uiUtils.MessageBox("Sem PN para remover!"); } } catch (Exception e) { Logger.getInstance().log("Erro ao remover Parceiros de Negócio", Logger.LogType.INFO, e); } }
/// <summary> /// Insere um Lancamento Contabil de Remessa. /// </summary> /// <param name="doc"></param> /// <returns></returns> public int insertShipmentJE(Documents doc) { int ret = 0; try { logger.pushOperation("insertShipmentJE"); JournalEntryOp jop = new JournalEntryOp(); //busca o existente JournalEntries existsJe = (JournalEntries)connection.Company.GetBusinessObject(BoObjectTypes.oJournalEntries); existsJe.GetByKey(doc.TransNum); JournalEntries remJE = copyJE(existsJe, false); remJE.Memo = "Lanc. Cont. Remessa - " + doc.DocEntry; remJE.UserFields.Fields.Item("U_DocRef").Value = doc.DocEntry; double val = 0; string memo = ""; bool flag = false; LedgerAccount[] accts = new LedgerAccount[doc.Lines.Count]; Recordset rs = dbFacade.Query( "SELECT OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, SUM(DLN4.TaxSum)[value], DLN1.OcrCode " + "FROM OSTA INNER JOIN DLN4 ON OSTA.Code = DLN4.StaCode AND OSTA.Type = DLN4.staType " + "INNER JOIN DLN1 ON DLN1.DocEntry = DLN4.DocEntry AND DLN1.LineNum = DLN4.LineNum " + "WHERE ExpnsCode = -1 AND DLN1.Usage IN (SELECT ID FROM OUSG WHERE U_Shipment = 1) AND DLN4.DocEntry = " + doc.DocEntry + "GROUP BY OSTA.Code, OSTA.SalesTax, OSTA.ARExpAct, DLN1.OcrCode " ); while (!rs.EoF) { LedgerAccount ledger; ledger.creditAccount = rs.Fields.Item("SalesTax").Value; ledger.debitAccount = rs.Fields.Item("ARExpAct").Value; ledger.provisionName = rs.Fields.Item("Code").Value; ledger.value = rs.Fields.Item("value").Value; ledger.profitCode = rs.Fields.Item("OcrCode").Value; //lanca credito e debito de acordo com o imposto addJournalEntryLines(remJE, ledger, ledger.value, remJE.DueDate, ledger.provisionName + " - Remessa", ledger.profitCode, ledger.profitCode); rs.MoveNext(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(rs); rs = null; System.GC.Collect(); //caso o documento seja de entrega, estorna custos: //O valor deve ser igual ao do número 1. if (doc.DocObjectCode == BoObjectTypes.oDeliveryNotes) { logger.log("Documento de Entrega, caso a utilizacao esteja configurada, o Custo sera estornado.", Logger.LogType.INFO, null, false); //para cada linha do doc... for (int i = 0; i < doc.Lines.Count; i++) { doc.Lines.SetCurrentLine(i); Document_Lines docLine = doc.Lines; if (jop.validateShmtNFUsage(Convert.ToInt32(docLine.Usage)) == 0) { double vl = dbFacade.Query("select StockValue from DLN1 " + "where DocEntry = " + docLine.DocEntry + " and LineNum = " + docLine.LineNum).Fields.Item("StockValue").Value; //busca a conta de custo da utilizacao NotaFiscalUsage usage = connection.Company.GetBusinessObject(BoObjectTypes.oNotaFiscalUsage); usage.GetByKey(Convert.ToInt32(docLine.Usage)); accts[i].debitAccount = usage.UserFields.Fields.Item("U_CstAcctCode").Value; accts[i].value = vl; accts[i].profitCode = docLine.CostingCode; val += vl; flag = true; } else { flag = false; } } if (flag) { //busca as contas do lancamento existente //LedgerAccount accts; int count = 0, pos = 0; JournalEntries_Lines lines = existsJe.Lines; while (count < lines.Count) { lines.SetCurrentLine(count); if (lines.AccountCode.StartsWith("42")) { accts[pos].creditAccount = lines.AccountCode; accts[pos++].provisionName = lines.LineMemo; } count++; } //ajusta as contas das linhas if (pos < accts.Length) { pos = 0; string act = accts[0].creditAccount; memo = accts[0].provisionName; for (int i = 0; i < accts.Length; i++) { accts[i].creditAccount = act; } } //1) Uma linha a Crédito, com a finalidade de estornar o lançamento a Débito na conta de custo //originado pelo documento “Entrega”, com valor correspondente à multiplicação das quantidades pelo custo unitário //dos itens em que houver a marcação “Y” para o campo “TaxOnly” na utilização. //lanca os custos para cada linha do doc //2) Uma linha a Débito, na conta de custo parametrizada na tabela de Utilizações, através do campo “U_CstAcctCode”, //para as linhas do documento “Entrega” em que a utilização possuir a marcação “Y” para o campo “TaxOnly”. foreach (LedgerAccount lact in accts) { addCreditJEL(remJE, lact.creditAccount, lact.debitAccount, lact.creditAccount , lact.value, memo + " - (Reverso)", lines.DueDate, lact.profitCode); addDebitJEL(remJE, lact.debitAccount, lact.creditAccount, lact.debitAccount , lact.value, "Lanc. Custos - " + lact.debitAccount, lines.DueDate, lact.profitCode); } } else { logger.log("Configuracao da Utilizacao nao permite estorno de Custos.", Logger.LogType.INFO); } } //insere o lanc. remJE = insertJE(remJE); if (remJE == null) { ret = -1; logger.log("Erro ao adicionar Lancamento Contabil para Reverter Custo e Contabilizar impostos: " + "Lancamento não adicionado.", Logger.LogType.ERROR); } else { logger.log("Adicionado Lancamento Contabil para Reverter Custo e Contabilizar impostos (" + remJE.JdtNum + ")." , Logger.LogType.INFO); doc.UserFields.Fields.Item("U_ShmtJE").Value = "" + remJE.JdtNum; ret = doc.Update(); logger.log("Chave de Lancamento de Remessa ajustada no Documento(" + doc.DocEntry + "). Retorno:" + ret, Logger.LogType.INFO); } } catch (Exception e) { ret = -1; logger.log("Erro ao Reverter Custos para o Lancamento " + doc.TransNum, Logger.LogType.ERROR, e, true); } logger.releaseOperation(); return(ret); }