Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • May 13 13:31
    samgoLiu starred adempiere/adempiere
  • May 12 11:00
  • May 11 02:51
    mckayERP commented #3455
  • May 11 02:14
    mckayERP commented #3454
  • May 09 02:32

    mckayERP on zwg_admp

    Update the project gitignore to… Upgrade the build process to us… Exclude unnecessary directories… and 2 more (compare)

  • May 08 02:10

    mckayERP on zwg_fixGitIgnore

    Cherry pick from the main repo … (compare)

  • May 08 01:54

    mckayERP on zwg_fixGitIgnore

    Update the project gitignore to… Upgrade the build process to us… Exclude unnecessary directories… (compare)

  • May 08 01:26

    mckayERP on zwg_admp

    Merge pull request #2 from mcka… (compare)

  • May 07 20:45
    yamelsenih review_requested #3455
  • May 07 20:45
    yamelsenih review_requested #3455
  • May 07 20:45
    yamelsenih assigned #3455
  • May 07 20:45
    yamelsenih labeled #3455
  • May 07 20:45
    yamelsenih labeled #3455
  • May 07 20:45
    yamelsenih opened #3455
  • May 07 20:45
    yamelsenih milestoned #3455
  • May 06 12:38

    mckayERP on zwg_addJunitJupiter

    Enable github workflows for the… (compare)

  • May 06 12:19

    mckayERP on zwg_addJunitJupiter

    Update the test.properties for … (compare)

  • May 06 11:57

    mckayERP on zwg_addJunitJupiter

    #2917 Add support to the WMS to… #2919 Checking that the quantit… #2923 Release Outbound Order al… and 46 more (compare)

  • May 05 20:13
    Raul-mz opened #3454
  • May 05 17:50

    e-Evolution on develop

    Add XML seed support for Action Merge branch 'develop' into fea… add Seed support (#33) * Impro… and 6 more (compare)

Michael McKay
@mckayERP
@e-Evolution Sorry Victor - I missed the necessary updates to the RUN_Build files. I just pushed an update to the pull request which add all the ANT libraries and fixes the RUN_Build scripts. The RUN_Build.bat and RUN_Build2.bat work on my machine. Can you test the .sh versions please?
pmdw
@pmdw

Hi All I am getting a proxy error and server not found for: http://www.adempiere.io/
502 proxy error Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.

Reason: Error reading from remote server

1 reply
and for http://www.adempiere.net/
I get server not found
https://www.isitdownrightnow.com/adempiere.net.html
also reports the site is down.
pmdw
@pmdw

Hi All
I am trying to find out what changed in the Allocations in the update to Version: 3.9.3
Allocations created before the 3.9.3 update are giving problems.

Menu

  • Open Items
    -- View Allocations
    select allocation
    reset allocation direct

Result: delete #0

if voided:
ERROR: update or delete on table "fact_acct" violates foreign key constraint "factacct_factreconciliation" on table "fact_reconciliation"
Detail: Key (fact_acct_id)=(1004894) is still referenced from table "fact_reconciliation".

On the web UI it does not show the document type as allocation whereas on the java client it shows it.
When trying to void it on the web UI, the error given is: Fill in mandatory fields: Document Type
Any ideas what to check or how to fix this?
Thanks

Michael McKay
@mckayERP
@pmdw The link to the fact reconciliation is the issue. In the Performance Analysis section, you should see the Fact Reconciliation (manual) window. Use it to find the reconciled entries for that allocation and unreconcile them. Then you should be able to delete the allocation. Someone likely performed an automatic or manual reconciliation on that record in the past. When you search for the reconciled records, you should be able to see when.
pmdw
@pmdw
@mckayERP Thanks I will try this.
pmdw
@pmdw
image.png

I am still having a problem
I think it has something to do with the update to 3.9.3
Issue: subsequent to an update, two things changed:

  • numbering
  • document type added

Unreconciled allocations can still not be deleted. However, there is a difference:
the allocations with the new numbering sequence (starting 5...AL) and the document type allocation can be reset whereas the allocations with previous document sequencing (starting 2....) and missing document type cannot be reset.

I have done a test and set the old document type to Allocation in the database but this has not helped.

What we are trying to achieve: some of the allocations cannot be reconciled as due to currency differences the payments to not match the invoice. I would like to reset the allocations and allocate the currency difference to a charge to make it matching.

Diego Chavez
@Diego-18
Good afternoon I was recommended that for the integration of the code in adempiere with other developments to use a cgi, which is compatible or which could be used with adempiere?
I was checking the wiki but the links there are missing.
Michael McKay
@mckayERP
@pmdw Can you set your trace level to fine and post any errors you get when you try to reset the allocation?
@Diego-18 It depends on what you are trying to integrate. What is your goal?
Diego Chavez
@Diego-18
@mckayERP Good evening, I'm part of a team where we are several developers, each working on a local DB where we apply our customizations (add either a table, elements or fields within the system) to cover the requirements requested, when integrating everything into a DB in general conflicts occur with the sequence of id, I've been looking for a tool that allows me to integrate the changes of each take into account the sequence of id of the DB in general and not the local DB and establish them to make the insert, but I have not managed to find a solution. Is there any tool or recommendation that can be used?
Michael McKay
@mckayERP
@Diego-18 Yes. For the project as a whole, we use a CGI script for this. See the doc in http://wiki.adempiere.io/Centralized_ID_Management#For_Projects_with_Distributed_Developers. The same script can be used for a project. The source is here - https://sourceforge.net/p/adempiere/svn/HEAD/tree/contributions/stuff/POC_Central_System_IDs/.
If you do not have access to the central ID system, let me know. If you are making changes to dictionary items or will want to contribute your changes back to the community at some point, you should also be using the central ID system as well.
DulipKumara
@DulipKumara
Can anyone say that what is the recommended easy Linux version to install Adempiere . Ubuntu or Suse?
Mario Calderon
@marcalwestf
@DulipKumara I've used both and for our purposes, I see no difference between them. Others use CenOS, etc. It is a matter of taste, I believe.
e-Evolution
@e-Evolution
@DulipKumara I use debian 10 stable version, and work perfect
Marek Mosiewicz
@marekmosiewicz
@e-Evolution which jdk do you use ?
e-Evolution
@e-Evolution
@marekmosiewicz I currectly use https://adoptopenjdk.net
JDK 8
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
Hello Sir , I want use Domain and upload ADempiere in Jelastic use Tomcat 8.5 there is any setting that need to requiered for that or use AWS , I run on local is nicely in my lapton with OS Ubuntu Focal Forsa 20.4 and my database in postgresql 13 , Apache Tomcat 8.5? For your Advice I'm so thankful
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
and if i use localy or cloud with only OS Ubuntu Server with not setting set up how I edit this code :
Screenshot from 2021-01-15 08-55-14.png
I Use VPN hamachi for group join IP VPN
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
Whats mean VPN propile is @Deprecated ?
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
Oh , I get it , must create docker image , but that code wan or vpn must edit or not?
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
but when I try localy , i cannot run in LAN, Wifi connection , even i use VPN Hamachi local cannot run too? i need some help sir, only run in my laptop but at network cannot
Michael McKay
@mckayERP
@FincenciusHastiMahardhika333 Are you successfully running docker on your laptop? If so, it should run equally well on a cloud server.
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
no sir in my laptop run without docker , but manually without docker , thank sir , i will create with docker first
Michael McKay
@mckayERP

@e-Evolution @yamelsenih I found an issue with the ProcessBuilder. As a static method, I can "hijack" the process if I'm running more than one process at a time. In my case, I have one process, call it Process1, that I have to run multiple times. I have another process, Process2, that I'm going to run in between the runs of Process1. I can reduce code duplication by creating a processorForProcess1 using the ProcessBuilder where I set the parameters and then call processorForProcess1.execute() each time I want to run it. It works the for multiple runs as expected. But when I use the ProcessBuilder to execute Process2, the next time I call processorForProcess1.execute()again, it reruns Process2.

I think the problem is the static constructor used by the ProcessBuilder and the internal static processBuilder field. I'd suggest we deprecate these and use a non-static constructor instead.

ProcessBuilder processor = ProcessBuilder.with...;
// should be
ProcessBuilder processor = new ProcessBuilder().with...;

What do you think?

Michael McKay
@mckayERP
On second thought, we could also just get rid of the internal static reference and just use "this" in place and the static version would work.
fincencius hasti mahardhika
@FincenciusHastiMahardhika333
Thank You Sir, Mr. Michael @mckayERP , now ADempiere can connect with LAN, Wifi ,actually i still use my local area network in my office , not yet create docker image , Thank you to all developher too, you are amazing
e-Evolution
@e-Evolution

@mckayERP Hi Mike, I did not understand your problem, but currently there is code that from a process is called another process that works correctly, it is important to handle the transaction, you can handle two approaches:

1.- Execute all the processes with the same transaction, it is recommended for processes that are executed in a short time and that must be completely atomic.

In this case, the parameters are important to indicate that it comes from a parent process, that the second process does not close the transaction at the end, and which transaction will be used:

.withParentProcess (this)
.withoutTransactionClose ()
.execute (get_TrxName ());

Example of executing two processes with the same transaction:

https://github.com/adempiere/adempiere/blob/57a1412d8457b13734d8b7c51b8dd4f375102796/org.adempiere.pos/src/main/java/base/org/adempiere/pos/command/CommandImmediateInvoice.java#L44

https://github.com/adempiere/adempiere/blob/57a1412d8457b13734d8b7c51b8dd4f375102796/org.adempiere.pos/src/main/java/base/org/adempiere/pos/process/GenerateImmediateInvoice.java#L48

2.- Execute each process in a different transaction, it is recommended for very long processes and where the control of the processed records is handled individually.

Use Trx.run (trxName -> {if you need to run a process in its own transaction.

https://github.com/adempiere/adempiere/blob/da25ed00d9ed3ed8ef72e1b31233c0f4a51a3c85/org.adempiere.pos/src/main/java/base/org/adempiere/pos/command/CommandGenerateReturn.java#L41

Michael McKay
@mckayERP
@e-Evolution The issue is the sequence. Here is a test that fails because of the problem.
@DisplayName("Given the GardenWorld context")
class ProcessBuilderTest extends CommonGWSetup {

    private static final String CLIENT_ACCOUNTING_IMMEDIATE = "I";

    ProcessBuilder clientAcctProcessor;
    ProcessBuilder resetAccounting;

    @BeforeEach
    void givenClientAccountingEnabled() {

        enableClientAccounting();

    }

    @Nested
    @DisplayName("When the first process is created")
    class WhenASingleProcessIsCreated {

        @BeforeEach
        void whenClientAcctProcessorIsCreated() {

            clientAcctProcessor = ProcessBuilder.create(ctx)
                    .process(org.adempiere.process.ClientAcctProcessor.class)
                    .withTitle("ClientAcctProcessorTest");

        }

        @Test
        @DisplayName("When the first process is run, "
                + "then the process succeeds")
        void whenTheClientAcctProcessorIsRun_itSucceeds() {

            ProcessInfo info = clientAcctProcessor.execute(trxName);
            assertEquals("OK", info.getSummary());

        }

        @Nested
        @DisplayName("When a second process is created")
        class WhenASecondProcessIsCreated {

            @BeforeEach
            void whenFactResetProcessorIsCreated() {

                resetAccounting = ProcessBuilder.create(ctx)
                        .process(org.compiere.process.FactAcctReset.class)
                        .withTitle("FactAcctReset")
                        .withParameter(FactAcctReset.AD_CLIENT_ID,
                                AD_CLIENT_ID)
                        .withParameter(FactAcctReset.DELETEPOSTING, true)
                        .withParameter(FactAcctReset.DATEACCT,
                                TimeUtil.getDay(1999, 01, 01), today);

            }

            @Test
            @DisplayName("When the second process is executed, "
                    + "then it succeeds")
            void whenTheFactResetProcessorIsRun_itSucceeds() {

                ProcessInfo info = resetAccounting.execute(trxName);
                assertTrue(info.getSummary().startsWith("Updated"));

            }

            @Test
            @DisplayName("When the first process is executed again, "
                    + "then it should succeed")
            void butWhenTheClientAcctProcessorIsRun_itShouldSucceed() {

                ProcessInfo info = clientAcctProcessor.execute(trxName);  // This throws a NPE
                assertEquals("OK", info.getSummary()); 

            }

        }

    }

    private void enableClientAccounting() {

        MSysConfig gwAccounting = getOrCreateClientAcctConfig();
        gwAccounting.setValue(CLIENT_ACCOUNTING_IMMEDIATE);
        gwAccounting.saveEx();

    }

    private MSysConfig getOrCreateClientAcctConfig() {

        return clientAccountingConfigs(AD_CLIENT_ID)
                .filter(config -> config.getAD_Client_ID() == AD_CLIENT_ID)
                .findFirst()
                .orElseGet(() -> {
                    MSysConfig config = new MSysConfig(ctx, 0, null);
                    config.setName("CLIENT_ACCOUNTING");
                    config.saveEx();
                    return config;
                });

    }

    private Stream<MSysConfig> clientAccountingConfigs(int clientId) {

        String where = "Name=? AND AD_Client_ID IN (0, ?)";
        return new Query(ctx, I_AD_SysConfig.Table_Name, where, null)
                .setOnlyActiveRecords(true)
                .setParameters("CLIENT_ACCOUNTING", clientId)
                .setOrderBy("AD_Client_ID DESC, AD_Org_ID DESC")
                .list(MSysConfig.class)
                .stream();

    }

}
Michael McKay
@mckayERP
The last test throws an unexpected NPE. When I trace that cause, I see the processBuilder field is pointing at the FactAcctReset but the processInfo is for the ClientAcctProcessor.
image.png
I think the cause is that the processBuilder field is static.
e-Evolution
@e-Evolution
@mckayERP , can please adding this testing with your branch the refactory for testing
then I can test and same time make merge the refactory testing , please can syncronice your branch with last develop branch
Michael McKay
@mckayERP
@e-Evolution Its been added. Thanks for reviewing this.
e-Evolution
@e-Evolution
@mckayERP , I testing you code and found some problems:
1 reply
or
no return a null value , the first that I executed I got null , I not understand m this throw an exception NPE
I rebuild all project and when a got a value timestamp then the testing continue
e-Evolution
@e-Evolution
Other proiblem that I found was that report to @yamelsenih Yamel , the table FM_Batch have not DateAcct then the return Client Accounting Processor return an NPE for this reason
1 reply
I adding the DateAcct column the FM_Batch only to solve the error
then the testing continue