diff --git a/IMIXS_JOURNAL.md b/IMIXS_JOURNAL.md deleted file mode 100644 index 15e7ce4..0000000 --- a/IMIXS_JOURNAL.md +++ /dev/null @@ -1,148 +0,0 @@ -Ich habe 2 SQL Datenbank tabellen mit Umsatzinformationen. Hier Beispieldaten: - -# select \* from journal_accounting; - -id | amount | baseamount | currency | date | exchangerate | reference | type -----+------------+------------+----------+------------+--------------+---------------------------------------------------------------------------+------------------ -27 | 2202.0000 | | EUR | 2025-02-12 | | c530a7aa-52c5-4dcf-be62-fd8946c4050b | Rechnungsausgang -28 | 13445.2800 | | EUR | 2025-02-17 | | 5c8fa50b-22fc-4f3f-b302-bb46842bb69e | Rechnungsausgang -29 | 3080.0000 | | EUR | 2025-03-06 | | c0e966a5-5a0d-45a7-9413-eeffadd0ea27 | Rechnungsausgang -30 | 20730.0000 | | EUR | 2025-02-17 | | c554aacd-b096-4102-aebf-a0cf5023d159 | Rechnungsausgang -31 | 370.0000 | | EUR | 2025-03-04 | | 69666156-dd0f-40cc-9f84-543c69e3a534 | Rechnungsausgang -32 | 1957.6800 | | EUR | 2025-03-10 | | 8522399b-e953-47e9-b18e-f9cfbc6565b0 | Rechnungsausgang -33 | 225.0000 | 220.7400 | USD | 2025-03-07 | 1.019307 | 0528bc9f-b0d9-4079-a89a-af2c978f141d | Rechnungsausgang -38 | 2806.9600 | | EUR | 2025-02-18 | | 9d0929a9-1790-4001-bce1-fb376a8032aa | Rechnungsausgang - -# select \* from journal_accounting_attribute; - -id | key | value | journalaccounting_id ------+-------------+------------------------------------------+---------------------- -1 | space.name | | 1 -2 | dbtr.name | SHANGHAI AS. DEV. PROSP. INT LOG. Co.Ltd | 1 -3 | dbtr.number | D18516 | 1 -4 | dbtr.name | SHANGHAI AS. DEV. PROSP. INT LOG. Co.Ltd | 2 -5 | space.name | | 2 -6 | dbtr.number | D18516 | 2 -7 | dbtr.number | D16571 | 3 -8 | space.name | | 3 -9 | dbtr.name | Bixwood AB | 3 - -Wie würdest Du ein Select Statement erstellen, das alle Umsätze pro Firma pro Währung nach Datum aufschlüsselt? - -# Umsätze Nach Firma - -SELECT -ja.date, -ja.currency, -jaa.value AS "Firma", -COALESCE(jab.value, '') AS "Firmennummer", -SUM(ja.amount) AS "Gesamtbetrag" -FROM -journal_accounting ja -LEFT JOIN -journal_accounting_attribute jaa ON ja.id = jaa.journalaccounting_id AND jaa.key = 'dbtr.name' -LEFT JOIN -journal_accounting_attribute jab ON ja.id = jab.journalaccounting_id AND jab.key = 'dbtr.number' -WHERE -jaa.key IN ('dbtr.name', 'dbtr.number') -GROUP BY -ja.date, -ja.currency, -jaa.value, -jab.value -ORDER BY -ja.date, -ja.currency, -jaa.value; - -# Umsätze nach Firma und Monat - -SELECT -DATE_TRUNC('month', ja.date) AS "Monat", -ja.currency, -jaa.value AS "Firma", -SUM(ja.amount) AS "Gesamtbetrag" -FROM -journal_accounting ja -LEFT JOIN -journal_accounting_attribute jaa ON ja.id = jaa.journalaccounting_id AND jaa.key = 'dbtr.name' -WHERE -jaa.key IN ('dbtr.name') -GROUP BY -"Monat", -ja.currency, -jaa.value -ORDER BY -"Monat", -ja.currency, -jaa.value; - -# Nur nach Monat - -SELECT -DATE_TRUNC('month', ja.date) AS "Monat", -SUM(ja.amount) AS "Gesamtbetrag" -FROM -journal_accounting ja -WHERE -ja.type = 'Rechnungsausgang' -GROUP BY -"Monat" -ORDER BY -"Monat"; -Monat | Gesamtbetrag -------------------------+-------------- -2025-02-01 00:00:00+00 | 39184.2400 -2025-03-01 00:00:00+00 | 5407.6800 - -# Java Impl - -```java -import org.imixs.workflow.office.journal.JournalAccounting; -import org.imixs.workflow.office.journal.JournalAccounting_; -import org.imixs.workflow.office.journal.QJournalAccounting; -import java.time.LocalDate; -import java.util.List; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.TemporalType; -import jakarta.persistence.TypedQuery; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Predicate; -import jakarta.persistence.criteria.Root; - -public class JournalAccountingRepository { - - private final EntityManager entityManager; - - public JournalAccountingRepository(EntityManager entityManager) { - this.entityManager = entityManager; - } - - public List findByMonth() { - CriteriaBuilder cb = entityManager.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(Object[].class); - Root root = cq.from(JournalAccounting.class); - - // Define the projection - cq.multiselect( - cb.function("DATE_TRUNC", LocalDate.class, root.get(JournalAccounting_.date), cb.literal("MONTH")), - cb.sum(root.get(JournalAccounting_.amount)) - ); - - // Define the where clause - Predicate predicate = cb.equal(root.get(JournalAccounting_.type), "Rechnungsausgang"); - cq.where(predicate); - - // Define the group by clause - cq.groupBy(root.get(JournalAccounting_.date).as(LocalDate.class)); - - // Order by month - cq.orderBy(cb.asc(root.get(JournalAccounting_.date).as(LocalDate.class))); - - TypedQuery query = entityManager.createQuery(cq); - return query.getResultList(); - } -} -```