Showing posts with label Hour and Expense journal. Show all posts
Showing posts with label Hour and Expense journal. Show all posts

Monday, November 17, 2025

Hour and Expense journal creation

 private void CreateExpenseJournal(TransactionID    _transIdLedgerjournaltable   _ledgerjournaltable ) 

    { 

        // LedgerJournalTable      ledgerJournaltable; 

        LedgerJournalTrans          ledgerJournalTransledgerJournalTransRef; 

        LedgerJournalTrans_Project  ledgerJournalTrans_ProjledgerJournalTrans_Projlocal; 

        NumberSequenceTable         numberSequenceTable; 

        Voucher                     voucher; 

  

        LedgerJournalTrans_ProjectTaxExtensionIN ledgerJournalTrans_ProjectTaxExtensionIN; 

  

        select ledgerJournalTrans_Proj 

        where ledgerJournalTrans_Proj.TransId == _transId; 

  

        select ledgerJournalTransRef 

        where ledgerJournalTransRef.RecId == ledgerJournalTrans_Proj.RefRecId; 

        ttsbegin; 

        ledgerJournalTrans.clear(); 

        ledgerJournalTrans.initValue(); 

        ledgerJournalTrans.initFromLedgerJournalTable_LT(_ledgerjournaltable); 

        numberSequenceTable = NumberSequenceTable::find(LedgerJournalName::find(_ledgerjournaltable.JournalName).NumberSequenceTable); 

        voucher = NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher(); 

        ledgerJournalTrans.Voucher          = voucher; 

        ledgerJournalTrans.JournalNum       = _ledgerjournaltable.JournalNum; 

        ledgerJournalTrans.DefaultDimension = ledgerJournalTransRef.DefaultDimension; 

        ledgerJournalTrans.TransDate        = ledgerJournalTransRef.TransDate; 

        ledgerJournalTrans.LedgerDimension  = ledgerJournalTransRef.LedgerDimension; 

        ledgerJournalTrans.Txt              = ledgerJournalTransRef.Txt; 

        ledgerJournalTrans.CurrencyCode     = ledgerJournalTransRef.CurrencyCode; 

        ledgerJournalTrans.OffsetAccountType = ledgerJournalTransRef.OffsetAccountType; 

        ledgerJournalTrans.OffsetLedgerDimension    = ledgerJournalTransRef.OffsetLedgerDimension; 

        ledgerJournalTrans.AccountType      = ledgerJournalTransRef.AccountType; 

        ledgerJournalTrans.TaxGroup                 = ledgerJournalTransRef.TaxGroup; 

        ledgerJournalTrans.TaxItemGroup     = ledgerJournalTransRef.TaxItemGroup; 

        ledgerJournalTrans.Qty              = ledgerJournalTransRef.Qty; 

        ledgerJournalTrans.ExchRate         = ledgerJournalTransRef.ExchRate; 

        ledgerJournalTrans.insert(); 

        ledgerJournalTrans.write(); 

        // ledgerJournalTrans 

  

        ledgerJournalTrans_Projlocal.initValue(); 

        ledgerJournalTrans_Projlocal.RefRecId           = ledgerJournalTrans.RecId; 

        ledgerJournalTrans_Projlocal.ProjTransDate      = ledgerJournalTrans_Proj.ProjTransDate; 

        ledgerJournalTrans_Projlocal.ActivityNumber     = ledgerJournalTrans_Proj.ActivityNumber; 

        ledgerJournalTrans_Projlocal.CategoryId         = ledgerJournalTrans_Proj.CategoryId; 

        ledgerJournalTrans_Projlocal.Worker             = ledgerJournalTrans_Proj.Worker; 

        ledgerJournalTrans_Projlocal.Qty                = ledgerJournalTrans_Proj.Qty * -1; 

        ledgerJournalTrans_Projlocal.CostPrice          = ledgerJournalTrans_Proj.CostPrice *-1; 

        ledgerJournalTrans_Projlocal.SalesPrice         = ledgerJournalTrans_Proj.SalesPrice * -1; 

        ledgerJournalTrans_Projlocal.LinePropertyId     = ledgerJournalTrans_Proj.LinePropertyId; 

        // added by kiran 

        ledgerJournalTrans_Projlocal.SalesCurrencyId    = ledgerJournalTransRef.CurrencyCode; 

        ledgerJournalTrans_Projlocal.ProjId             = ledgerJournalTrans_Proj.ProjId; 

        ledgerJournalTrans_Projlocal.Ale_ProjInvoiceId   = ProjInvoiceCost::findTransId(_transId).ProjInvoiceId; 

        ledgerJournalTrans_Projlocal.PositionId = ledgerJournalTrans_Proj.PositionId; 

        ledgerJournalTrans_Projlocal.ALE_PeriodName = ledgerJournalTrans_Proj.ALE_PeriodName; 

        ledgerJournalTrans_Projlocal.insert(); 

        ledgerJournalTrans_Projlocal.write(); 

  

        ledgerJournalTrans_ProjectTaxExtensionIN.clear(); 

        ledgerJournalTrans_ProjectTaxExtensionIN.AssessableValue = (ledgerJournalTrans_Projlocal.Qty*ledgerJournalTrans_Projlocal.SalesPrice) * -1; 

        ledgerJournalTrans_ProjectTaxExtensionIN.LedgerJournalTrans_Project = ledgerJournalTrans_Projlocal.RecId; 

        ledgerJournalTrans_ProjectTaxExtensionIN.insert(); 

        ttscommit; 

  

  

    } 

    private void CreateHourJournal(TransactionID _transIdprojJournalTable   _projtable ) 

    { 

        ProjJournalTable        projJournalTable; 

        ProjJournalTrans        projJournalTransprojJournalTransRef; 

        ProjInvoiceEmpl         projinvoiceempl; 

        NumberSeq               numberSeq; 

        ProjJournalTransTaxExtensionIN      projJournalTransTaxExtensionINprojJournalTransTaxExtensionINlocal; 

        // projinvoiceempl  = ProjInvoiceEmpl::findRecId(_RefRecId); 

  

        select projJournalTransRef 

        where projJournalTransRef.TransId == _transId; 

        projJournalTransTaxExtensionIN = ProjJournalTransTaxExtensionIN::findByProjJournalTrans(projJournalTransRef.RecId); 

  

        projJournalTrans.clear(); 

        projJournalTrans.initValue(); 

        projJournalTrans.initFromProjJournalTable(_projtable); 

        projJournalTrans.setTransDate(); 

  

        projJournalTrans.TransDate      = projJournalTransRef.TransDate; 

        projJournalTrans.CurrencyId     = projJournalTransRef.CurrencyId; 

        projJournalTrans.DefaultDimensionprojJournalTransRef.DefaultDimension; 

        projJournalTrans.TaxGroupId     = projJournalTransRef.TaxGroupId; 

        numberSeq = NumberSeq::newGetVoucherFromId(_projtable.VoucherNumberSequenceTable, false); 

        projJournalTrans.Voucher        = numberSeq.voucher(); 

        projJournalTrans.ProjId         = projJournalTransRef.ProjId; 

        projJournalTrans.SalesPrice     = projJournalTransRef.SalesPrice; 

        projJournalTrans.ActivityNumber = projJournalTransRef.ActivityNumber; 

        projJournalTrans.CategoryId     = projJournalTransRef.CategoryId; 

        projJournalTrans.Worker         = projJournalTransRef.Worker; 

        projJournalTrans.Txt            = projJournalTransRef.Txt; 

        projJournalTrans.Qty            = projJournalTransRef.Qty* -1; 

        projJournalTrans.ProjTransDate  = projJournalTransRef.ProjTransDate; 

        projJournalTrans.PositionId     = projJournalTransRef.PositionId; 

        //projJournalTrans.ALE_PeriodName = projJournalTransRef.ALE_PeriodName; 

        projJournalTrans.LinePropertyId =projJournalTransRef.LinePropertyId; 

        projJournalTrans.ReverseEntry   = projJournalTransRef.ReverseEntry; 

        projJournalTrans.ALE_Absent     = projJournalTransRef.ALE_Absent; 

        projJournalTrans.ALE_Holiday    = projJournalTransRef.ALE_Holiday; 

        projJournalTrans.ALE_PeriodName = projJournalTransRef.ALE_PeriodName; 

        projJournalTrans.ALE_Present    = projJournalTransRef.ALE_Present; 

        projJournalTrans.Ale_ProjInvoiceId  = ProjInvoiceEmpl::findTransId(_transId).ProjInvoiceId; 

  

        projJournalTrans.Ale_WorkerName = HcmWorker::find(projJournalTrans.Worker).name(); 

        projJournalTrans.Ale_PositionName = HcmPosition::findByPosition(projJournalTrans.PositionId).description(); 

        

        projJournalTrans.insert(); 

  

        //projJournalTransTaxExtensionINlocal.initValue(); 

        select projJournalTransTaxExtensionINlocal where projJournalTransTaxExtensionINlocal.ProjJournalTrans == projJournalTrans.RecId; 

        if(!projJournalTransTaxExtensionINlocal) 

        { 

            projJournalTransTaxExtensionINlocal.clear(); 

            projJournalTransTaxExtensionINlocal.AssessableValue = projJournalTransTaxExtensionIN.AssessableValue * -1; 

            //projJournalTransTaxExtensionINlocal.CompanyLocation = projJournalTransTaxExtensionIN.CompanyLocation; 

            projJournalTransTaxExtensionINlocal.ProjJournalTrans    = projJournalTrans.RecId; 

            projJournalTransTaxExtensionINlocal.insert(); 

        } 

        else 

        { 

            ttsbegin; 

            projJournalTransTaxExtensionINlocal.selectForUpdate(true); 

            projJournalTransTaxExtensionINlocal.AssessableValue = projJournalTransTaxExtensionIN.AssessableValue * -1; 

            projJournalTransTaxExtensionINlocal.ProjJournalTrans    = projJournalTrans.RecId; 

            projJournalTransTaxExtensionINlocal.update(); 

            ttscommit; 

        } 

    } 

 

void run() 

    { 

        ProjJournalTable        projJournalTableprojJournalTableLocalprojJournalTableUpdate; 

        LedgerJournalTable      ledgerjournaltableledgerjournaltablelocal; 

        ProjEmplTransSale       projEmplTransSalelocal; 

        ProjJournalTrans        projJournalTranshour; 

        boolean                 projtranscheck = false, projinvoicecostcheck = false; 

        ProjInvoiceCostDetail   projinvoicecostdetail; 

        ProjInvoiceCost         projInvoiceCost; 

        ProjCostTransSale       ProjCostTransSaleLocal; 

  

        ListIterator    li = new ListIterator(list); 

        #ISOCountryRegionCodes 

  

        projCreditInvoicing = true; 

  

        //ttsBegin; 

        projJournalTable.clear(); 

        projJournalTable.initValue(); 

        projJournalTable.JournalNameId  = "CreditNote"; 

        projJournalTable.JournalType    =ProjJournalType::Hour; 

        projJournalTable.initFromProjJournalName(ProjJournalName::find(projJournalTable.JournalNameId)); 

        projJournalTable.insert(); 

  

        ledgerjournaltable.clear(); 

        ledgerjournaltable.initValue(); 

  

        ledgerjournaltable.initFromLedgerJournalName("CreditNote"); 

        ledgerjournaltable.JournalType      = LedgerJournalType::Cost; 

        ledgerjournaltable.JournalName = "CreditNote"; 

        //ledgerjournaltable.initFromLedgerJournalName(ledgerjournaltable.JournalName); 

        ledgerjournaltable.insert(); 

  

        li.begin(); 

        while (li.more()) 

        { 

            tmpFrmVirtual = li.value(); 

  

            switch (tmpFrmVirtual.TableNum) 

            { 

                // project transactions 

                case tableNum(ProjInvoiceEmplDetail) : 

                   // this.doProjInvoiceEmpl(tmpFrmVirtual.RefRecId); 

                   projEmplTransSalelocal       = ProjEmplTransSale::find(tmpFrmVirtual.RefRecId); // to do 

                    if (projEmplTransSalelocal) 

                    { 

                        this.CreateHourJournal(projEmplTransSalelocal.TransId,projJournalTable); // to do 

                        projtranscheck = true; 

                    } 

                    break; 

  

                case tableNum(ProjInvoiceCostDetail) : 

                   // this.doProjInvoiceCost(tmpFrmVirtual.RefRecId); 

                   ProjCostTransSaleLocal   = ProjCostTransSale::find(tmpFrmVirtual.RefRecId); 

                    if(ProjCostTransSaleLocal) 

                    { 

                        this.CreateExpenseJournal(ProjCostTransSaleLocal.TransId,ledgerjournaltable); // to do 

                        projinvoicecostcheck = true; 

                    } 

                    break; 

  

                case tableNum(ProjInvoiceRevenueDetail) : 

                   // this.doProjInvoiceRevenue(tmpFrmVirtual.RefRecId); 

                    break; 

  

                case tableNum(ProjInvoiceItemDetail) : 

                    //this.doProjInvoiceItem(tmpFrmVirtual.RefRecId); 

                    break; 

  

                case tableNum(ProjInvoiceOnAccDetail) : 

                   // this.doProjInvoiceOnAcc(tmpFrmVirtual.RefRecId); 

                    break; 

  

                default: 

                    throw error("@SYS50049"); 

            } 

  

            //if (projCreditInvoicing) 

            //{ 

            //    this.doCreditInvoicing(tmpFrmVirtual.RefRecIdtmpFrmVirtual.TableNum); 

            //} 

  

            li.next(); 

        } 

            if (projtranscheck == false) 

            { 

                delete_from projJournalTableLocal 

            where projJournalTableLocal.RecId  == projJournalTable.RecId; 

            } 

            else 

            { 

                select sum(Qty) from projJournalTranshour 

            where projJournalTranshour.RecId == projJournalTable.RecId; 

                projJournalTable.selectForUpdate(true); 

                projJournalTable.ProjQty   = projJournalTranshour.Qty; 

                projJournalTable.update(); 

                info(strFmt("%1 hour journal has been created", projJournalTable.JournalId)); 

            } 

            if(projinvoicecostcheck == false) 

            { 

                delete_from ledgerjournaltablelocal 

            where ledgerjournaltablelocal.RecId  == ledgerjournaltable.RecId; 

            } 

            else 

            { 

                info(strFmt("%1 Expense journal has been created", ledgerjournaltable.JournalNum)); 

            } 

  

            //ttsCommit; 

    }