1 17 package org.openbravo.erpCommon.ad_forms; 18 19 import org.openbravo.erpCommon.utility.SequenceIdData; 20 import org.openbravo.base.secureApp.VariablesSecureApp; 21 import org.openbravo.exception.*; 22 import java.math.*; 23 import java.sql.*; 24 import javax.servlet.*; 25 import org.apache.log4j.Logger ; 26 import org.openbravo.database.ConnectionProvider; 28 import java.sql.Connection ; 29 30 31 32 public class FactLine { 33 static Logger log4jFactLine = Logger.getLogger(FactLine.class); 34 35 public final BigDecimal ZERO = new BigDecimal("0"); 36 37 private AcctServer m_docVO = null; 38 private DocLine m_docLine = null; 39 private Account m_acct = null; 40 41 private String m_C_AcctSchema_ID = ""; 43 private AcctSchema m_acctSchema = null; 44 45 private String m_C_Currency_ID = ""; 46 private String m_AmtSourceDr = ""; 47 private String m_AmtSourceCr = ""; 48 private String m_AmtAcctDr = ""; 50 private String m_AmtAcctCr = ""; 51 private String m_GL_Budget_ID = ""; 53 private String m_GL_Category_ID = ""; 54 private String m_PostingType = ""; 55 private String m_M_Locator_ID = ""; 57 private String m_C_LocFrom_ID = ""; 58 private String m_C_LocTo_ID = ""; 59 private String m_AD_Org_ID = ""; 61 private String m_AD_Table_ID; 63 private String m_Record_ID; 64 private String m_Line_ID; 65 68 private String m_Fact_Acct_ID; 69 public String m_Fact_Acct_Group_ID; 70 public String m_SeqNo; 71 public String m_DocBaseType; 72 73 74 81 public FactLine (String AD_Table_ID, String Record_ID, String Line_ID, String Fact_Acct_Group_ID, String SeqNo, String DocBaseType){ 82 m_AD_Table_ID = AD_Table_ID; 83 m_Record_ID = Record_ID; 84 m_Line_ID = Line_ID; 85 m_Fact_Acct_Group_ID = Fact_Acct_Group_ID; 86 m_SeqNo = SeqNo; 87 m_DocBaseType = DocBaseType; 88 } 90 97 public FactLine (String AD_Table_ID, String Record_ID, String Line_ID){ 98 m_AD_Table_ID = AD_Table_ID; 99 m_Record_ID = Record_ID; 100 m_Line_ID = Line_ID; 101 } 103 106 public void dispose(){ 107 m_docVO = null; 108 m_docLine = null; 109 m_acct = null; 110 } 112 119 public boolean setAmtSource (String C_Currency_ID, String AmtSourceDr, String AmtSourceCr){ 120 m_C_Currency_ID = C_Currency_ID; 121 m_AmtSourceDr = AmtSourceDr; 122 if (m_AmtSourceDr.equals("")) 123 m_AmtSourceDr = "0"; 124 m_AmtSourceCr = AmtSourceCr; 125 if (m_AmtSourceCr.equals("")) 126 m_AmtSourceCr = "0"; 127 if (m_AmtSourceDr.equals("0") && m_AmtSourceCr.equals("0")) 129 return false; 130 return true; 131 } 133 138 public void setAccount (AcctSchema acctSchema, Account acct) { 139 m_acctSchema = acctSchema; 140 m_C_AcctSchema_ID = acctSchema.getC_AcctSchema_ID(); 141 m_acct = acct; 142 } 144 149 public void setAmtAcct(String AmtAcctDr, String AmtAcctCr){ 150 m_AmtAcctDr = AmtAcctDr; 151 m_AmtAcctCr = AmtAcctCr; 152 } 154 159 public void setJournalInfo(String GL_Budget_ID, String GL_Category_ID){ 160 m_GL_Budget_ID = GL_Budget_ID; 161 m_GL_Category_ID = GL_Category_ID; 162 } 164 168 public void setPostingType(String PostingType){ 169 m_PostingType = PostingType; 170 } 172 177 public void setDocumentInfo(AcctServer docVO, DocLine docLine){ 178 m_docVO = docVO; 179 m_docLine = docLine; 180 } 182 183 184 192 public boolean convert (String Acct_Currency_ID, String ConversionDate, String CurrencyRateType,ConnectionProvider conn){ 193 log4jFactLine.debug("convert - beginning"); 195 log4jFactLine.debug("convert - m_C_Currency_ID : " + m_C_Currency_ID); 196 if (m_C_Currency_ID==null || m_C_Currency_ID.equals(AcctServer.NO_CURRENCY)) 197 m_C_Currency_ID = Acct_Currency_ID; 198 log4jFactLine.debug("convert - Acct_Currency_ID : " + Acct_Currency_ID); 199 if (Acct_Currency_ID.equals(m_C_Currency_ID)){ 200 m_AmtAcctDr = m_AmtSourceDr; 201 m_AmtAcctCr = m_AmtSourceCr; 202 return true; 203 } 204 if (m_docVO == null){ 205 log4jFactLine.warn("convert - No Document VO"); 206 return false; 207 } 208 m_AmtAcctDr = AcctServer.getConvertedAmt (m_AmtSourceDr, m_C_Currency_ID, Acct_Currency_ID, 209 ConversionDate, CurrencyRateType, m_docVO.AD_Client_ID, m_docVO.AD_Org_ID,conn); 210 if (m_AmtAcctDr == null || m_AmtAcctDr.equals(""))return false; 211 m_AmtAcctCr = AcctServer.getConvertedAmt (m_AmtSourceCr, m_C_Currency_ID, Acct_Currency_ID, 212 ConversionDate, CurrencyRateType, m_docVO.AD_Client_ID, m_docVO.AD_Org_ID,conn); 213 return true; 214 } 216 221 public void setLocationFromOrg (String AD_Org_ID, boolean isFrom,ConnectionProvider conn){ 222 if (AD_Org_ID.equals(""))return; 223 String C_Location_ID = ""; 224 FactLineData [] data = null; 225 try{ 226 data = FactLineData.select(conn,AD_Org_ID); 227 }catch(ServletException e){ 228 log4jFactLine.warn(e); 229 } 230 if(data.length>0)C_Location_ID = data[0].location; 231 if (!C_Location_ID.equals("")) 232 setLocation (C_Location_ID, isFrom); 233 } 235 240 public void setLocation (String C_Location_ID, boolean isFrom){ 241 if (isFrom) 242 m_C_LocFrom_ID = C_Location_ID; 243 else 244 m_C_LocTo_ID = C_Location_ID; 245 } 247 255 public String getAD_Org_ID (ConnectionProvider conn){ 256 if (m_AD_Org_ID!=null && !m_AD_Org_ID.equals("")) return m_AD_Org_ID; 258 if (m_M_Locator_ID!=null && !m_M_Locator_ID.equals("")){ 260 FactLineData [] data = null; 261 try{ 262 data = FactLineData.selectOrg(conn,m_M_Locator_ID,m_docVO.AD_Client_ID); 263 }catch(ServletException e){ 264 log4jFactLine.warn(e); 265 } 266 if (data!=null && data.length>0){ 267 m_AD_Org_ID = data[0].org; 268 log4jFactLine.debug("setAD_Org_ID=" + m_AD_Org_ID + " (1 from M_Locator_ID=" + m_M_Locator_ID + ")"); 269 }else log4jFactLine.warn("getAD_Org_ID - Did not find M_Locator_ID=" + m_M_Locator_ID); 270 } 272 if ((m_AD_Org_ID==null || m_AD_Org_ID.equals("")||m_AD_Org_ID.equals("0")) && m_docLine != null){ 274 m_AD_Org_ID = m_docLine.m_AD_Org_ID; 275 log4jFactLine.debug ("setAD_Org_ID=" + m_AD_Org_ID + " (2 from DocumentLine)"); 276 } 277 if (m_AD_Org_ID==null || m_AD_Org_ID.equals("")||m_AD_Org_ID.equals("0")){ 279 if (AcctServer.DOCTYPE_GLJournal.equals (m_docVO.DocumentType)){ 280 m_AD_Org_ID = m_acct.getAD_Org_ID (); log4jFactLine.debug ("setAD_Org_ID=" + m_AD_Org_ID + " (3 from Acct)"); 282 } 283 else{ 284 m_AD_Org_ID = m_docVO.AD_Org_ID; 285 log4jFactLine.debug("setAD_Org_ID=" + m_AD_Org_ID + " (3 from Document)"); 286 } 287 } 288 if (m_AD_Org_ID==null || m_AD_Org_ID.equals("")||m_AD_Org_ID.equals("0")){ 290 if (AcctServer.DOCTYPE_GLJournal.equals (m_docVO.DocumentType)){ 291 m_AD_Org_ID = m_docVO.AD_Org_ID; 292 log4jFactLine.debug("setAD_Org_ID=" + m_AD_Org_ID + " (4 from Document)"); 293 } 294 else{ 295 m_AD_Org_ID = m_acct.getAD_Org_ID (); 296 log4jFactLine.debug ("setAD_Org_ID=" + m_AD_Org_ID + " (4 from Acct)"); 297 } 298 } 299 return (m_AD_Org_ID==null)?"":m_AD_Org_ID; 301 } 303 307 public void setAD_Org_ID (String AD_Org_ID){ 308 if (!AD_Org_ID.equals("")) 309 m_AD_Org_ID = AD_Org_ID; 310 } 312 317 public void setM_Locator_ID (String M_Locator_ID) 318 { 319 m_M_Locator_ID = M_Locator_ID; 320 if (!m_AD_Org_ID.equals("")) 322 log4jFactLine.warn("setM_Locator_ID - Organization already calculated"); 323 } 325 326 330 public BigDecimal getSourceBalance(){ 331 if (m_AmtSourceDr.equals("")) 332 m_AmtSourceDr = "0"; 333 if (m_AmtSourceCr.equals("")) 334 m_AmtSourceCr = "0"; 335 BigDecimal AmtSourceDr = new BigDecimal(m_AmtSourceDr); 336 BigDecimal AmtSourceCr = new BigDecimal(m_AmtSourceCr); 337 return AmtSourceDr.subtract(AmtSourceCr); 339 } 341 342 347 public void setLocationFromBPartner (String C_BPartner_Location_ID, boolean isFrom,ConnectionProvider conn){ 348 if (C_BPartner_Location_ID.equals("")) 349 return; 350 String C_Location_ID = ""; 351 FactLineData[] data =null; 352 try{ 353 data = FactLineData.selectLocation(conn,C_BPartner_Location_ID); 354 }catch(ServletException e){ 355 log4jFactLine.warn(e); 356 } 357 if (data.length>0){ 358 C_Location_ID = data[0].location; 359 } 360 if (!C_Location_ID.equals("")) 361 setLocation (C_Location_ID, isFrom); 362 } 364 369 public void setLocationFromLocator (String M_Locator_ID, boolean isFrom, ConnectionProvider conn){ 370 if (M_Locator_ID.equals("")) 371 return; 372 String C_Location_ID = ""; 373 FactLineData [] data = null; 374 try{ 375 data = FactLineData.selectLocationFromLocator(conn, M_Locator_ID); 376 }catch(ServletException e){ 377 log4jFactLine.debug(e); 378 } 379 C_Location_ID = data[0].location; 380 if (!C_Location_ID.equals("")) 381 setLocation (C_Location_ID, isFrom); 382 } 384 385 392 public boolean save (Connection con,ConnectionProvider conn,VariablesSecureApp vars)throws ServletException{ 393 396 String AD_Client_ID = getAD_Client_ID(); 397 String AD_Org_ID = getAD_Org_ID(conn); 398 399 String Account_ID = m_acct.Account_ID; 401 if (Account_ID == null) Account_ID=""; 402 String DateDoc = ""; 404 if (m_docLine != null) 405 DateDoc = m_docLine.m_DateDoc; 406 if (DateDoc == null || DateDoc.equals("")) 407 DateDoc = m_docVO.DateDoc; 408 String DateAcct = ""; 409 if (m_docLine != null) 410 DateAcct = m_docLine.m_DateAcct; 411 if (DateAcct == null || DateAcct.equals("")) 412 DateAcct = m_docVO.DateAcct; 413 log4jFactLine.debug("FactLine - save - antes de Record_ID2 " + m_Record_ID); 414 String Record_ID2 = ""; 415 if (m_docLine != null) 416 Record_ID2 = m_docLine.m_Record_Id2; 417 log4jFactLine.debug("FactLine - save - despues de Record_ID2 = " + Record_ID2); 418 String C_Period_ID = ""; 419 if (m_docLine != null) 420 C_Period_ID = setC_Period_ID(m_docVO,m_docLine.m_DateAcct, conn); 421 if (C_Period_ID == null || C_Period_ID.equals("")) 422 C_Period_ID = m_docVO.C_Period_ID; 423 424 String C_UOM_ID = ""; 426 String Qty = m_docVO.Qty; 427 String C_Tax_ID = ""; 428 if (m_docLine != null){ 429 C_UOM_ID = m_docLine.m_C_UOM_ID; 430 Qty = m_docLine.m_qty; 431 C_Tax_ID = m_docLine.m_C_Tax_ID; 432 } 433 log4jFactLine.debug("FactLine - save - despues de line optional info"); 434 String M_Product_ID = ""; 436 if (m_docLine != null) 437 M_Product_ID = m_docLine.m_M_Product_ID; 438 if (M_Product_ID==null) M_Product_ID=""; 439 if (M_Product_ID.equals("")) 440 M_Product_ID = m_docVO.M_Product_ID; 441 if (M_Product_ID==null) M_Product_ID=""; 442 if (M_Product_ID.equals("")) 443 M_Product_ID = m_acct.M_Product_ID; 444 if (M_Product_ID==null) M_Product_ID=""; 445 446 String C_LocFrom_ID = m_C_LocFrom_ID; 447 if (C_LocFrom_ID==null) C_LocFrom_ID=""; 448 if (C_LocFrom_ID.equals("") && m_docLine != null) 449 C_LocFrom_ID = m_docLine.m_C_LocFrom_ID; 450 if (C_LocFrom_ID==null) C_LocFrom_ID=""; 451 if (C_LocFrom_ID.equals("")) 452 C_LocFrom_ID = m_docVO.C_LocFrom_ID; 453 if (C_LocFrom_ID==null) C_LocFrom_ID=""; 454 if (C_LocFrom_ID.equals("")) 455 C_LocFrom_ID = m_acct.C_LocFrom_ID; 456 if (C_LocFrom_ID==null) C_LocFrom_ID=""; 457 458 String C_LocTo_ID = m_C_LocFrom_ID; if (C_LocTo_ID==null) C_LocTo_ID=""; 460 if (C_LocTo_ID.equals("") && m_docLine != null) 461 C_LocTo_ID = m_docLine.m_C_LocTo_ID; 462 if (C_LocTo_ID==null) C_LocTo_ID=""; 463 if (C_LocTo_ID.equals("")) 464 C_LocTo_ID = m_docVO.C_LocTo_ID; 465 if (C_LocTo_ID==null) C_LocTo_ID=""; 466 if (C_LocTo_ID.equals("")) 467 C_LocTo_ID = m_acct.C_LocTo_ID; 468 if (C_LocTo_ID==null) C_LocTo_ID=""; 469 470 String C_BPartner_ID = ""; 471 if (m_docLine != null) 472 C_BPartner_ID = m_docLine.m_C_BPartner_ID; 473 if (C_BPartner_ID==null) C_BPartner_ID=""; 474 if (C_BPartner_ID.equals("")) 475 C_BPartner_ID = m_docVO.C_BPartner_ID; 476 if (C_BPartner_ID==null) C_BPartner_ID=""; 477 if (C_BPartner_ID.equals("")) 478 C_BPartner_ID = m_acct.C_BPartner_ID; 479 if (C_BPartner_ID==null) C_BPartner_ID=""; 480 481 String AD_OrgTrx_ID = ""; 482 if (m_docLine != null) 483 AD_OrgTrx_ID = m_docLine.m_AD_OrgTrx_ID; 484 if (AD_OrgTrx_ID==null) AD_OrgTrx_ID=""; 485 if (AD_OrgTrx_ID.equals("")) 486 AD_OrgTrx_ID = m_docVO.AD_OrgTrx_ID; 487 if (AD_OrgTrx_ID==null) AD_OrgTrx_ID=""; 488 if (AD_OrgTrx_ID.equals("")) 489 AD_OrgTrx_ID = m_acct.AD_OrgTrx_ID; 490 if (AD_OrgTrx_ID==null) AD_OrgTrx_ID=""; 491 492 String C_SalesRegion_ID = getC_SalesRegion_ID(conn); 493 494 String C_Project_ID = ""; 495 if (m_docLine != null) 496 C_Project_ID = m_docLine.m_C_Project_ID; 497 if (C_Project_ID==null) C_Project_ID=""; 498 if (C_Project_ID.equals("")) 499 C_Project_ID = m_docVO.C_Project_ID; 500 if (C_Project_ID==null) C_Project_ID=""; 501 if (C_Project_ID.equals("")) 502 C_Project_ID = m_acct.C_Project_ID; 503 if (C_Project_ID==null) C_Project_ID=""; 504 505 String C_Campaign_ID = ""; 506 if (m_docLine != null) 507 C_Campaign_ID = m_docLine.m_C_Campaign_ID; 508 if (C_Campaign_ID==null) C_Campaign_ID=""; 509 if (C_Campaign_ID.equals("")) 510 C_Campaign_ID = m_docVO.C_Campaign_ID; 511 if (C_Campaign_ID==null) C_Campaign_ID=""; 512 if (C_Campaign_ID.equals("")) 513 C_Campaign_ID = m_acct.C_Campaign_ID; 514 if (C_Campaign_ID==null) C_Campaign_ID=""; 515 516 String C_Activity_ID = ""; 517 if (m_docLine != null) 518 C_Activity_ID = m_docLine.m_C_Activity_ID; 519 if (C_Activity_ID==null) C_Activity_ID=""; 520 if (C_Activity_ID.equals("")) 521 C_Activity_ID = m_docVO.C_Activity_ID; 522 if (C_Activity_ID==null) C_Activity_ID=""; 523 if (C_Activity_ID.equals("")) 524 C_Activity_ID = m_acct.C_Activity_ID; 525 if (C_Activity_ID==null) C_Activity_ID=""; 526 527 String User1_ID = ""; 528 if (m_docLine != null) 529 User1_ID = m_docLine.m_User1_ID; 530 if (User1_ID==null) User1_ID=""; 531 if (User1_ID.equals("")) 532 User1_ID = m_docVO.User1_ID; 533 if (User1_ID==null) User1_ID=""; 534 if (User1_ID.equals("")) 535 User1_ID = m_acct.User1_ID; 536 if (User1_ID==null) User1_ID=""; 537 538 String User2_ID = ""; 539 if (m_docLine != null) 540 User2_ID = m_docLine.m_User2_ID; 541 if (User2_ID==null) User2_ID=""; 542 if (User2_ID.equals("")) 543 User2_ID = m_docVO.User2_ID; 544 if (User2_ID==null) User2_ID=""; 545 if (User2_ID.equals("")) 546 User2_ID = m_acct.User2_ID; 547 if (User2_ID==null) User2_ID=""; 548 549 log4jFactLine.debug("FactLine - save - antes de Revenue Recognition for AR Invoices"); 550 551 if (m_docVO.DocumentType.equals(AcctServer.DOCTYPE_ARInvoice) && 553 m_docLine != null && m_docLine.p_productInfo!=null && m_docLine.getC_RevenueRecognition_ID() != null && !m_docLine.getC_RevenueRecognition_ID().equals("")){ 554 Account_ID = createRevenueRecognition(con,conn,m_docLine.getC_RevenueRecognition_ID(), m_docLine.m_TrxLine_ID,AD_Client_ID, AD_Org_ID, "0", Account_ID, 555 M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID,C_LocFrom_ID, C_LocTo_ID, C_SalesRegion_ID, C_Project_ID,C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID, vars); 556 } 557 log4jFactLine.debug("FactLine - save - despues de Revenue Recognition for AR Invoices"); 558 StringBuffer description = new StringBuffer (); 560 description = getDescription(conn , C_BPartner_ID,m_C_AcctSchema_ID,m_AD_Table_ID, m_Record_ID, (m_docLine!=null?m_docLine.m_TrxLine_ID:null)); 561 int no =0; 562 try{ 563 566 m_Fact_Acct_ID = SequenceIdData.getSequence(conn, "Fact_Acct", vars.getClient()); 567 570 log4jFactLine.debug("FactLine - save - m_Record_ID = " + m_Record_ID + " - Account_ID = " + Account_ID + " - m_Fact_Acct_Group_ID = " + m_Fact_Acct_Group_ID + " - m_SeqNo = " + m_SeqNo); 571 FactLineData [] cuenta = FactLineData.selectAccountValue(conn, Account_ID); 572 BigDecimal zero = new BigDecimal("0.0"); 573 if(zero.compareTo(new BigDecimal(m_AmtSourceDr))==0 && zero.compareTo(new BigDecimal(m_AmtSourceCr))==0 && zero.compareTo(new BigDecimal(m_AmtAcctDr))==0 && zero.compareTo(new BigDecimal(m_AmtAcctCr))==0) return true; 574 else no = FactLineData.insertFactAct(con,conn,m_Fact_Acct_ID,AD_Client_ID,AD_Org_ID,m_C_AcctSchema_ID,Account_ID, cuenta[0].value, 575 cuenta[0].description,DateDoc,DateAcct,C_Period_ID,m_AD_Table_ID,m_Record_ID,m_Line_ID,m_GL_Category_ID,m_GL_Budget_ID,C_Tax_ID, 576 m_PostingType,m_C_Currency_ID,m_AmtSourceDr,m_AmtSourceCr,m_AmtAcctDr,m_AmtAcctCr,C_UOM_ID,Qty,m_M_Locator_ID, 577 M_Product_ID,C_BPartner_ID,AD_OrgTrx_ID,C_LocFrom_ID,C_LocTo_ID,C_SalesRegion_ID,C_Project_ID,C_Campaign_ID, 578 C_Activity_ID,User1_ID,User2_ID,description.toString(), m_Fact_Acct_Group_ID, m_SeqNo, m_DocBaseType, Record_ID2); 579 if(m_docVO.m_IsOpening.equals("Y")) FactLineData.updateFactAcct(con,conn,m_AD_Table_ID,m_Record_ID); 580 }catch(ServletException e){ 581 log4jFactLine.warn(e); 582 } 583 return no==1; 584 } 586 590 private String getAD_Client_ID(){ 591 String AD_Client_ID = m_docVO.AD_Client_ID; 592 if (AD_Client_ID==null || AD_Client_ID.equals("")) 593 AD_Client_ID = m_acct.AD_Client_ID; 594 return (AD_Client_ID==null)?"":AD_Client_ID; 595 } 597 601 private String getC_SalesRegion_ID (ConnectionProvider conn){ 602 String C_SalesRegion_ID = ""; 603 if (m_docLine != null) 604 C_SalesRegion_ID = m_docLine.m_C_SalesRegion_ID; 605 if (C_SalesRegion_ID==null) C_SalesRegion_ID=""; 606 if (C_SalesRegion_ID.equals("")) 607 C_SalesRegion_ID = m_docVO.C_SalesRegion_ID; 608 if (C_SalesRegion_ID==null) C_SalesRegion_ID=""; 609 if (C_SalesRegion_ID.equals("") && !m_docVO.BP_C_SalesRegion_ID.equals("")) 610 C_SalesRegion_ID = m_docVO.BP_C_SalesRegion_ID; 611 if (C_SalesRegion_ID==null) C_SalesRegion_ID=""; 612 if (C_SalesRegion_ID.equals("") && !m_docVO.C_BPartner_Location_ID.equals("") && m_docVO.BP_C_SalesRegion_ID.equals("") && m_acctSchema.isAcctSchemaElement(AcctSchemaElement.SEGMENT_SalesRegion)){ 615 FactLineData [] data = null; 616 try{ 617 data = FactLineData.selectSalesRegion(conn,m_docVO.C_BPartner_Location_ID); 618 }catch(ServletException e){ 619 log4jFactLine.warn(e); 620 } 621 if (data.length>0){ 622 C_SalesRegion_ID = data[0].salesregion; 623 } 624 if (C_SalesRegion_ID!=null && !C_SalesRegion_ID.equals(""))m_docVO.BP_C_SalesRegion_ID = C_SalesRegion_ID; else m_docVO.BP_C_SalesRegion_ID = ""; log4jFactLine.debug("getC_SalesRegion_ID=" + C_SalesRegion_ID + " (from BPL)" ); 627 } 628 if (C_SalesRegion_ID==null || C_SalesRegion_ID.equals("")) 629 C_SalesRegion_ID = m_acct.C_SalesRegion_ID; 630 return (C_SalesRegion_ID==null)?"":C_SalesRegion_ID; 632 } 634 662 private String createRevenueRecognition (Connection con,ConnectionProvider conn, 663 String C_RevenueRecognition_ID, String C_InvoiceLine_ID, 664 String AD_Client_ID, String AD_Org_ID, String AD_User_ID, String Account_ID, 665 String M_Product_ID, String C_BPartner_ID, String AD_OrgTrx_ID, 666 String C_LocFrom_ID, String C_LocTo_ID, String C_SRegion_ID, String C_Project_ID, 667 String C_Campaign_ID, String C_Activity_ID, String User1_ID, String User2_ID,VariablesSecureApp vars){ 668 log4jFactLine.debug("FactLine - createRevenueRecognition START"); 670 String P_Revenue_Acct = AcctServer.getValidCombination(AD_Client_ID, AD_Org_ID, 671 m_C_AcctSchema_ID, Account_ID,"0", "", AD_User_ID, 672 M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID, 673 C_LocFrom_ID, C_LocTo_ID, C_SRegion_ID, C_Project_ID, 674 C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID,conn); 675 log4jFactLine.debug("FactLine - createRevenueRecognition end"); 676 if (P_Revenue_Acct.equals("")){ 677 log4jFactLine.warn("FactLine - createRevenueRecognition - Revenue_Acct not found"); 678 return Account_ID; 679 } 680 681 String UnearnedRevenue_Acct = ""; 683 String new_Account_ID = ""; 684 FactLineData[] data = null; 685 try{ 686 data = FactLineData.selectUnearnedRevenue(conn, m_C_AcctSchema_ID, C_BPartner_ID); 687 688 if (data.length>0){ 689 UnearnedRevenue_Acct = data[0].unearnedrevenue; 690 new_Account_ID = data[0].account; 691 } 692 if (new_Account_ID.equals("")){ 693 log4jFactLine.warn ("createRevenueRecognition - UnearnedRevenue_Acct not found"); 694 return Account_ID; 695 } 696 697 String C_RevenueRecognition_Plan_ID = SequenceIdData.getSequence(conn, "C_RevenueRecognition_Plan", vars.getClient()); 699 int no = FactLineData.insertRevenueRecognitionPlan(con,conn, C_RevenueRecognition_Plan_ID, C_RevenueRecognition_ID, 700 m_C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, AD_User_ID, C_InvoiceLine_ID, UnearnedRevenue_Acct, P_Revenue_Acct, m_C_Currency_ID, 701 getAcctBalance()); 702 if (no != 1){ 703 log4jFactLine.warn ("createRevenueRecognition - Plan NOT created"); 704 return Account_ID; 705 } 706 }catch(ServletException e){ 707 log4jFactLine.warn(e); 708 } 709 log4jFactLine.debug ("createRevenueRecognition From Acctount_ID=" + Account_ID + " to " + new_Account_ID 710 + " - Plan from UnearnedRevenue_Acct=" + UnearnedRevenue_Acct + " to Revenue_Acct=" + P_Revenue_Acct); 711 return new_Account_ID; 712 } 714 718 public String getAcctBalance(){ 719 if (m_AmtAcctDr.equals("")) 720 m_AmtAcctDr = "0"; 721 if (m_AmtAcctCr.equals("")) 722 m_AmtAcctCr = "0"; 723 BigDecimal AmtAcctDr = new BigDecimal(m_AmtAcctDr); 724 BigDecimal AmtAcctCr = new BigDecimal(m_AmtAcctCr); 725 return AmtAcctDr.subtract(AmtAcctCr).toString(); 726 } 728 732 public boolean isBalanceSheet(){ 733 return m_acct.isBalanceSheet(); 734 } 736 745 public void currencyCorrect (BigDecimal deltaAmount){ 746 boolean negative = deltaAmount.compareTo(ZERO) < 0; 747 BigDecimal AmtAcctDr = new BigDecimal(m_AmtAcctDr); 748 BigDecimal AmtAcctCr = new BigDecimal(m_AmtAcctCr); 749 boolean adjustDr = AmtAcctDr.compareTo(AmtAcctCr) > 0; 750 751 log4jFactLine.debug ("currencyCorrect - " + deltaAmount.toString() 752 + "; Old-AcctDr=" + m_AmtAcctDr + ",AcctCr=" + m_AmtAcctCr 753 + "; Negative=" + negative + "; AdjustDr=" + adjustDr); 754 if (adjustDr) 755 if (negative) m_AmtAcctDr = AmtAcctDr.subtract(deltaAmount).toString(); 756 else m_AmtAcctDr = AmtAcctDr.add(deltaAmount).toString(); 757 else 758 if (negative) m_AmtAcctCr = AmtAcctCr.add(deltaAmount).toString(); 759 else m_AmtAcctCr = AmtAcctCr.subtract(deltaAmount).toString(); 760 log4jFactLine.debug("currencyCorrect - New-AcctDr=" + m_AmtAcctDr + ",AcctCr=" + m_AmtAcctCr); 761 } 763 public String setC_Period_ID(AcctServer m_docVO,String strDateAcct, ConnectionProvider conn){ 764 AcctServerData [] data=null; 765 try{ 766 data = AcctServerData.periodOpen(conn,m_docVO.AD_Client_ID,m_docVO.DocumentType,strDateAcct); 767 }catch (ServletException e){ 768 log4jFactLine.warn(e); 769 } 770 return data[0].period; 771 } 773 public StringBuffer getDescription(ConnectionProvider connectionProvider,String strC_Bpartner_ID,String strC_AcctSchema_ID, String strAD_Table_ID, String strRecord_ID, String strLine)throws ServletException{ 774 StringBuffer description = new StringBuffer (); 775 String strSql = AcctServerData.selectDescription(connectionProvider, strAD_Table_ID, strC_AcctSchema_ID); 776 try { 777 if (!strSql.equals("")){ 778 strSql = strSql.replaceAll("@RecordId@",strRecord_ID); 779 if(strLine==null || strLine.equals("")) strLine = "NULL"; 780 strSql = strSql.replaceAll("@Line@",strLine); 781 Statement st = connectionProvider.getStatement(); 782 ResultSet result; 783 boolean executed = false; 784 try{ 785 if (st.execute(strSql)) { 786 result = st.getResultSet(); 787 while(result.next()) { 788 description.append(result.getString(1)); 789 } 790 result.close(); 791 } 792 }catch (SQLException e){ 793 log4jFactLine.error("SQL error in query: " + strSql + "Exception:"+ e); 794 throw new ServletException(Integer.toString(e.getErrorCode())); 795 } finally { 796 try { 797 connectionProvider.releaseStatement(st); 798 } catch (Exception ignored) {} 799 } 800 } 801 if(description.length()==0){ 802 description.append(m_docVO.DocumentNo); 803 if (!strC_Bpartner_ID.equals("")) description.append(" # ").append(AcctServerData.selectBpartnerName(connectionProvider,strC_Bpartner_ID)); 804 if (m_docLine != null){ 806 if (m_docLine.m_Line!=null && !m_docLine.m_Line.equals("")) 807 description.append(" # ").append(m_docLine.m_Line); 808 if (m_docLine.m_description!=null && !m_docLine.m_description.equals("")) 809 description.append(" (").append(m_docLine.m_description).append(")"); 810 } 811 } 813 if (description.length() > 255) description = new StringBuffer (description.substring(0,254)); 814 } catch (NoConnectionAvailableException ex) { 815 throw new ServletException("@CODE=NoConnectionAvailable"); 816 } catch (SQLException ex2) { 817 throw new ServletException("@CODE=" + Integer.toString(ex2.getErrorCode()) + "@" + ex2.getMessage()); 818 } catch (Exception ex3) { 819 throw new ServletException("@CODE=@" + ex3.getMessage()); 820 } 821 if (description.length() > 255) description = new StringBuffer (description.substring(0,254)); 822 return description; 823 } 824 825 } 826 | Popular Tags |