Compare commits
172 Commits
31aee6b0d0
...
ac9d9aa18e
| Author | SHA1 | Date |
|---|---|---|
|
|
ac9d9aa18e | |
|
|
ccaf5a808a | |
|
|
ff64aab5ca | |
|
|
751f6a5d33 | |
|
|
f384951277 | |
|
|
2ea4730458 | |
|
|
aebedaee28 | |
|
|
5ea94dad45 | |
|
|
978c8a6e25 | |
|
|
fd647247ba | |
|
|
6e1a7c3dc5 | |
|
|
edea913918 | |
|
|
e5f364f391 | |
|
|
1522dd84d1 | |
|
|
99e038c4a3 | |
|
|
e34371db60 | |
|
|
36c08e7476 | |
|
|
a875f477ed | |
|
|
b6e25d71f8 | |
|
|
be264655dc | |
|
|
38f452e4b0 | |
|
|
f4fb07b66f | |
|
|
9bb107864f | |
|
|
e65879c201 | |
|
|
b9d6cdc4e9 | |
|
|
f88b49f1ff | |
|
|
c82810a269 | |
|
|
25ccc6951b | |
|
|
c191234b53 | |
|
|
157269644c | |
|
|
b4f89d9c0e | |
|
|
2d4befbfa7 | |
|
|
f61e2f569a | |
|
|
6b2455c6f4 | |
|
|
e9a71c4092 | |
|
|
3a810791d0 | |
|
|
5ee17ae649 | |
|
|
d61d6b2cf1 | |
|
|
42b56141cd | |
|
|
4ab86f7f4e | |
|
|
87f6d93d8c | |
|
|
19305437e9 | |
|
|
8b511cdaa1 | |
|
|
bac29a7059 | |
|
|
8fc5aa14e0 | |
|
|
c46fd668b8 | |
|
|
f3e5601a13 | |
|
|
ecd8563a58 | |
|
|
3864166213 | |
|
|
89e6e6209f | |
|
|
9158a638f4 | |
|
|
d89f8b9801 | |
|
|
3512cd00da | |
|
|
70cde611a0 | |
|
|
b9cfc8c6e6 | |
|
|
ad267ad247 | |
|
|
fa576f0e70 | |
|
|
2dd6971626 | |
|
|
9f84b0607f | |
|
|
a2a86c62bf | |
|
|
43c78b3018 | |
|
|
f60f599619 | |
|
|
62c86f82c3 | |
|
|
66819ecf79 | |
|
|
eb4def6f86 | |
|
|
b4532b3eb8 | |
|
|
afa5dcfeae | |
|
|
b0ef82de43 | |
|
|
776b135a4a | |
|
|
32d7e2e96a | |
|
|
1051bae3d5 | |
|
|
6dce6368e9 | |
|
|
bf3fb64d3b | |
|
|
30057f7a12 | |
|
|
e4808398c9 | |
|
|
3de220daec | |
|
|
90c4b7a64a | |
|
|
976d5ff19a | |
|
|
514bf2fc21 | |
|
|
aaaecb42e9 | |
|
|
eb5f03f8e5 | |
|
|
57f33550ee | |
|
|
ec7d0b5eb2 | |
|
|
9f14c96134 | |
|
|
f61bda9a14 | |
|
|
6f20622001 | |
|
|
c286348cb0 | |
|
|
d4356b7e67 | |
|
|
cdfa764b08 | |
|
|
1f913baa7a | |
|
|
8100d9c092 | |
|
|
ba5d576fdd | |
|
|
01ac9e0248 | |
|
|
766654087b | |
|
|
a577c1a343 | |
|
|
86c7e2d026 | |
|
|
61229b3277 | |
|
|
219aeffafe | |
|
|
951f9681b2 | |
|
|
1093272fa1 | |
|
|
7a667bc5db | |
|
|
d1450a5ce0 | |
|
|
a07047a5ea | |
|
|
aac79ae622 | |
|
|
bcc6bd5684 | |
|
|
58c1aa5904 | |
|
|
2813cab603 | |
|
|
22fc9ea462 | |
|
|
55f9bf2349 | |
|
|
8938fe1d3c | |
|
|
1a89cd6b8f | |
|
|
afe578e9b3 | |
|
|
6192a8fff8 | |
|
|
b118283530 | |
|
|
b28edf2be1 | |
|
|
0641e614c2 | |
|
|
4e250b6a52 | |
|
|
061ef5fec4 | |
|
|
77f0ababe6 | |
|
|
10d327f4e2 | |
|
|
abeb245226 | |
|
|
924bdb6fc1 | |
|
|
5f44c9c19d | |
|
|
a45283b855 | |
|
|
689573c90d | |
|
|
6d9c35a365 | |
|
|
4875568cf2 | |
|
|
0f02545dbb | |
|
|
9042f8319a | |
|
|
45544a2058 | |
|
|
cad01851d5 | |
|
|
9d6f8c852f | |
|
|
76adcb1f98 | |
|
|
5994292dbb | |
|
|
69995b178b | |
|
|
9740f2bf18 | |
|
|
6f4686f9db | |
|
|
fb594a5f56 | |
|
|
7cd0c88e3a | |
|
|
9071ae38d6 | |
|
|
a5a1ce3050 | |
|
|
88a9d3eb3a | |
|
|
2aa7215e2c | |
|
|
a3fb6f5b9c | |
|
|
ecfb71bd7d | |
|
|
c47db344e8 | |
|
|
4091c74093 | |
|
|
4409415d55 | |
|
|
e1ed11f224 | |
|
|
a86a73c391 | |
|
|
6cb5788651 | |
|
|
47f1336df4 | |
|
|
39fff47de6 | |
|
|
42e998ff7d | |
|
|
766ca60cd4 | |
|
|
95fee2623b | |
|
|
0e17a03d37 | |
|
|
4c7a1b124f | |
|
|
439b158224 | |
|
|
f82c6a9468 | |
|
|
44688e37a1 | |
|
|
7d70e4ef02 | |
|
|
8e08cb5cc8 | |
|
|
bd26ce7b37 | |
|
|
67948cbad2 | |
|
|
ac5f84f48d | |
|
|
13bf6bf51d | |
|
|
611a863707 | |
|
|
e577f45770 | |
|
|
0eabdd9d08 | |
|
|
e4e27f4ee5 | |
|
|
0aa862e105 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -35,33 +35,42 @@ jobs:
|
|||
|
||||
# Install Java
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '${{ env.java }}'
|
||||
distribution: ${{ env.java_distribution }}
|
||||
check-latest: true
|
||||
|
||||
# setup maven to 3.9 for tycho
|
||||
- name: Set up Maven
|
||||
uses: stCarolas/setup-maven@v5
|
||||
with:
|
||||
maven-version: 3.9.6
|
||||
|
||||
# on case PR it check out to commit is merger of PR to base (master)
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
# fetch all commit so sornar can know who change a line, it's resolved Warning: Shallow clone detected, no blame information will be provided. You can convert to non-shallow with 'git fetch --unshallow'.
|
||||
fetch-depth: 0
|
||||
|
||||
# restore sonar cache
|
||||
- name: Cache sonar material restore
|
||||
id: cache-sonar-material-restore
|
||||
uses: actions/cache/restore@v3
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: |
|
||||
~/.sonar/cache
|
||||
key: ${{ runner.os }}-sonar-${{ env.branch_name }}
|
||||
|
||||
# restore maven cache
|
||||
- name: Cache maven material restore
|
||||
id: cache-maven-material-restore
|
||||
uses: actions/cache/restore@v3
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: |
|
||||
~/.m2
|
||||
key: ${{ runner.os }}-maven-${{ env.branch_name }}
|
||||
~/.m2/repository
|
||||
key: ${{ runner.os }}-maven-${{ env.branch_name }}-repository
|
||||
|
||||
# run sonar on master only because sonar for PR come from other repository isn't support at moment (already on develop)
|
||||
# https://stackoverflow.com/a/39720346
|
||||
|
|
@ -78,19 +87,21 @@ jobs:
|
|||
codeql="-Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Denforcer.skip -Dmaven.javadoc.skip -DskipTests -Dmaven.test.skip.exec -Dlicense.skip=true -Drat.skip=true"
|
||||
mvn -B -V -e $codeql $sonar $sonarProject $sonarExclusions package org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
||||
|
||||
# save sonar cache
|
||||
- name: Cache sonar material save
|
||||
uses: actions/cache/save@v3
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: |
|
||||
~/.sonar/cache
|
||||
key: ${{ steps.cache-sonar-material-restore.outputs.cache-primary-key }}
|
||||
|
||||
# save maven cache
|
||||
- name: Cache maven material save
|
||||
uses: actions/cache/save@v3
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: |
|
||||
~/.m2
|
||||
key: ${{ steps.cache-maven-material-restore.outputs.cache-primary-key }}
|
||||
~/.m2/repository
|
||||
key: ${{ steps.cache-maven-material-restore.outputs.cache-primary-key }}-repository
|
||||
|
||||
analyze_java_codeQL:
|
||||
name: Analyze java by code QL
|
||||
|
|
@ -103,26 +114,34 @@ jobs:
|
|||
|
||||
# Install Java
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '${{ env.java }}'
|
||||
distribution: ${{ env.java_distribution }}
|
||||
check-latest: true
|
||||
|
||||
# setup maven to 3.9 for tycho
|
||||
- name: Set up Maven
|
||||
uses: stCarolas/setup-maven@v5
|
||||
with:
|
||||
maven-version: 3.9.6
|
||||
|
||||
# on case PR it check out to commit is merger of PR to base (master)
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# restore maven cache
|
||||
- name: Cache maven material restore
|
||||
id: cache-maven-material-restore
|
||||
uses: actions/cache/restore@v3
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: |
|
||||
~/.m2
|
||||
key: ${{ runner.os }}-maven-${{ env.branch_name }}
|
||||
~/.m2/repository
|
||||
key: ${{ runner.os }}-maven-${{ env.branch_name }}-repository
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: java
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
|
|
@ -131,17 +150,18 @@ jobs:
|
|||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
||||
# save maven cache
|
||||
- name: Cache maven material save
|
||||
uses: actions/cache/save@v3
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: |
|
||||
~/.m2
|
||||
key: ${{ steps.cache-maven-material-restore.outputs.cache-primary-key }}
|
||||
~/.m2/repository
|
||||
key: ${{ steps.cache-maven-material-restore.outputs.cache-primary-key }}-repository
|
||||
|
||||
|
||||
analyze_javascript_codeQL:
|
||||
|
|
@ -155,12 +175,12 @@ jobs:
|
|||
|
||||
# on case PR it check out to commit is merger of PR to base (master)
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: javascript
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
ADEMPIERE_MAIL_PASSWORD=
|
||||
ADEMPIERE_DB_PASSWORD="TTFkNXUxdC1PMkk5Cg=="
|
||||
ADEMPIERE_DB_SYSTEM="TTFkNXUxdC1PMkk5Cg=="
|
||||
|
|
@ -27,6 +27,7 @@ AS
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -34,7 +35,7 @@ BEGIN
|
|||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ AS
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -34,7 +35,7 @@ BEGIN
|
|||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ AS
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -34,7 +35,7 @@ BEGIN
|
|||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
|
|
|
|||
|
|
@ -23,13 +23,11 @@ AS
|
|||
StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -87,19 +85,14 @@ BEGIN
|
|||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
ProductQty := ROUND (ProductQty/bom.BOMQty, StdPrecision);
|
||||
ProductQty := ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
ProductQty := Bomqtyonhand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
|
|
@ -115,7 +108,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (Quantity, StdPrecision);
|
||||
RETURN TRUNC(Quantity, StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END Bomqtyonhand;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,11 @@ AS
|
|||
StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -91,19 +89,14 @@ BEGIN
|
|||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
ProductQty := ROUND (ProductQty/bom.BOMQty, StdPrecision);
|
||||
ProductQty := ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND bom.IsVerified = 'Y') THEN
|
||||
ProductQty := BomqtyonhandForReservation (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
|
|
@ -119,7 +112,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (Quantity, StdPrecision);
|
||||
RETURN TRUNC(Quantity, StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END BOMQTYONHANDFORRESERVATION;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,11 @@ AS
|
|||
v_StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -91,19 +89,14 @@ BEGIN
|
|||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyordered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -124,7 +117,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
--
|
||||
RETURN 0;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,11 @@ AS
|
|||
v_StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
|
|
@ -91,19 +89,14 @@ BEGIN
|
|||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyreserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -124,7 +117,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END Bomqtyreserved;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ BEGIN
|
|||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
|
|
@ -20,6 +20,7 @@ BEGIN
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
|
|
@ -30,7 +31,6 @@ BEGIN
|
|||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ BEGIN
|
|||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
|
|
@ -20,6 +20,7 @@ BEGIN
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
|
|
@ -30,7 +31,6 @@ BEGIN
|
|||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ BEGIN
|
|||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
|
|
@ -20,6 +20,7 @@ BEGIN
|
|||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
|
|
@ -30,7 +31,6 @@ BEGIN
|
|||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
|
|
|||
|
|
@ -54,13 +54,11 @@ BEGIN
|
|||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
|
|
@ -71,19 +69,14 @@ BEGIN
|
|||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyonhand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -99,7 +92,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
|
|
|
|||
|
|
@ -56,13 +56,11 @@ BEGIN
|
|||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
|
|
@ -75,19 +73,14 @@ BEGIN
|
|||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND bom.IsVerified = 'Y') THEN
|
||||
v_ProductQty := BOMQtyOnHandForReservation (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -103,7 +96,7 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
|
|
|
|||
|
|
@ -57,13 +57,11 @@ BEGIN
|
|||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
|
|
@ -76,20 +74,15 @@ BEGIN
|
|||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision );
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyordered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -110,11 +103,12 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision );
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
--
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql STABLE;
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -57,13 +57,11 @@ BEGIN
|
|||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
|
|
@ -76,19 +74,14 @@ BEGIN
|
|||
AND M_Warehouse_ID =v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyreserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
|
|
@ -109,11 +102,11 @@ BEGIN
|
|||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE plpgsql STABLE;
|
||||
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ CREATE OR REPLACE FUNCTION ProductAttribute
|
|||
(
|
||||
p_M_AttributeSetInstance_ID NUMERIC
|
||||
)
|
||||
RETURNS VARCHAR AS $body$
|
||||
RETURNS VARCHAR AS
|
||||
$BODY$
|
||||
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
|
|
@ -87,6 +88,7 @@ BEGIN
|
|||
END IF;
|
||||
RETURN v_Name;
|
||||
END;
|
||||
|
||||
$body$ LANGUAGE plpgsql STABLE;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
CREATE TABLE dbreplicasyncverifier (lastupdate date)
|
||||
;
|
||||
|
||||
INSERT INTO dbreplicasyncverifier values (to_date('1900-01-01 00:00:00', 'yyyy-mm-dd HH24:MI:SS'))
|
||||
;
|
||||
*/
|
||||
|
||||
CREATE OR REPLACE FUNCTION forbid_multiple_rows_in_dbreplicasyncverifier()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
-- Check if the table already contains a row
|
||||
IF (SELECT COUNT(*) FROM dbreplicasyncverifier) > 0 THEN
|
||||
RAISE EXCEPTION 'Table can only contain one row.';
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql
|
||||
;
|
||||
|
||||
CREATE TRIGGER single_row_only_trigger_dbreplicasyncverifier
|
||||
BEFORE INSERT ON dbreplicasyncverifier
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION forbid_multiple_rows_in_dbreplicasyncverifier()
|
||||
;
|
||||
|
||||
CREATE OR REPLACE RULE delete_dbreplicasyncverifier AS ON DELETE TO dbreplicasyncverifier DO INSTEAD NOTHING
|
||||
;
|
||||
|
||||
|
|
@ -41,13 +41,6 @@ END;
|
|||
$BODY$
|
||||
LANGUAGE plpgsql;
|
||||
|
||||
CREATE TABLE dual ( dummy char );
|
||||
|
||||
INSERT INTO dual values ( 'X' );
|
||||
|
||||
CREATE OR REPLACE RULE insert_dual AS ON INSERT TO dual DO INSTEAD NOTHING;
|
||||
|
||||
CREATE OR REPLACE RULE update_dual AS ON UPDATE TO dual DO INSTEAD NOTHING;
|
||||
|
||||
CREATE OR REPLACE RULE delete_dual AS ON DELETE TO dual DO INSTEAD NOTHING;
|
||||
CREATE VIEW dual AS SELECT 'X'::varchar AS dummy
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-2981 - Implement JSON Field type
|
||||
SELECT register_migration_script('202402261300_IDEMPIERE-2981.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Feb 26, 2024, 1:00:29 PM CET
|
||||
INSERT INTO AD_Reference (AD_Reference_ID,Name,Description,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU,ShowInactive) VALUES (200267,'JSON','JSON format values','D',0,0,'Y',TO_TIMESTAMP('2024-02-26 13:00:28','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:00:28','YYYY-MM-DD HH24:MI:SS'),100,'D','N','b6fcc751-edd8-4421-acd0-3cde02a9576d','N')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
-- IDEMPIERE-2981 - Implement JSON Field type
|
||||
SELECT register_migration_script('202402261354_IDEMPIERE-2981.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Feb 26, 2024, 1:54:35 PM CET
|
||||
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203924,0,0,'Y',TO_TIMESTAMP('2024-02-26 13:54:35','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:54:35','YYYY-MM-DD HH24:MI:SS'),100,'JsonData','JSON Data','The json field stores json data.','JSON Data','D','c4ea7a81-96a9-4a5d-bb87-e913e1c8ed48')
|
||||
;
|
||||
|
||||
-- Feb 26, 2024, 1:55:37 PM CET
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,IsPartitionKey) VALUES (216570,0,'JSON Data','The json field stores json data.',135,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-02-26 13:55:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:55:36','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','927b83df-d161-4332-ad44-8ffed99e8cf4','Y',0,'N','N','N','N')
|
||||
;
|
||||
|
||||
-- Feb 28, 2024, 5:41:55 PM CET
|
||||
ALTER TABLE Test ADD JsonData CLOB DEFAULT NULL CONSTRAINT test_jsondata_ij CHECK (JsonData IS JSON)
|
||||
;
|
||||
|
||||
-- Feb 26, 2024, 1:56:08 PM CET
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (208472,'JSON Data','The json field stores json data.',152,216570,'Y',100,310,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-02-26 13:56:08','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:56:08','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','e47ef529-71ba-4f9b-9014-b188e17e8ef4','Y',290,5)
|
||||
;
|
||||
|
||||
-- Feb 29, 2024, 1:52:50 PM CET
|
||||
UPDATE AD_Field SET NumLines=5,Updated=TO_TIMESTAMP('2024-02-29 13:52:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208472
|
||||
;
|
||||
|
||||
-- Feb 29, 2024, 2:07:30 PM CET
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Invalid JSON',0,0,'Y',TO_TIMESTAMP('2024-02-29 14:07:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-29 14:07:30','YYYY-MM-DD HH24:MI:SS'),100,200876,'InvalidJSON','D','a263376f-a12e-4943-92f1-7d7ce8a67a2b')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6110
|
||||
SELECT register_migration_script('202404171125_IDEMPIERE-6110.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Apr 17, 2024, 11:25:53 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Products or charges configured as ''Freight Product'' or ''Freight Charge'' cannot be added to this order due to the combination of delivery via rule and freight cost rule',0,0,'Y',TO_TIMESTAMP('2024-04-17 11:25:53','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-04-17 11:25:53','YYYY-MM-DD HH24:MI:SS'),100,200897,'FreightOrderLineNotAllowed','D','204c8bb9-d002-4beb-bbc3-1d1a11d7471d')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
-- IDEMPIERE-5136
|
||||
SELECT register_migration_script('202404220830_IDEMPIERE-5136_MissingDropIndex.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
DROP INDEX AD_MESSAGE_TRL_KEY
|
||||
;
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
-- IDEMPIERE-6123 Query in search window causing slowness and load spikes in the database (FHCA-5356)
|
||||
SELECT register_migration_script('202404302320_IDEMPIERE-6123.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Apr 30, 2024, 11:20:08 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200244,0,0,TO_TIMESTAMP('2024-04-30 23:20:08','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-04-30 23:20:08','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GRIDTABLE_INITIAL_COUNT_TIMEOUT_IN_SECONDS','1','Timeout for the initial count on windows','D','C','5fae1af7-74ca-41d8-bbd3-d506c6c23b6a')
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:22:16 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200245,0,0,TO_TIMESTAMP('2024-04-30 23:22:16','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-04-30 23:22:16','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GLOBAL_MAX_QUERY_RECORDS','100000','Maximum number of records allowed to search in a window, can be overriden per Role or Tab','D','C','840fb67c-4609-41f2-9e20-e0ea9d839065')
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:23:28 PM CEST
|
||||
UPDATE AD_Message SET MsgText='The query returned more records than allowed, consider adding more filters.',Updated=TO_TIMESTAMP('2024-04-30 23:23:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=852
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:24:06 PM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The initial count query timed out, loading records ...',0,0,'Y',TO_TIMESTAMP('2024-04-30 23:24:06','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-04-30 23:24:06','YYYY-MM-DD HH24:MI:SS'),100,200887,'CountQueryTimeoutLoadBackground','D','988292d7-175f-41c2-b560-43d62b8326a9')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6137 Payment Rule does not appear in reports from Sales Order
|
||||
SELECT register_migration_script('202405071219_IDEMPIERE-6137.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- May 7, 2024, 12:19:00 PM CEST
|
||||
UPDATE AD_Column SET AD_Reference_Value_ID=195,Updated=TO_TIMESTAMP('2024-05-07 12:19:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200012 AND COALESCE(AD_Reference_Value_ID,0)!=195
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
-- IDEMPIERE-6123 Query in search window causing slowness and load spikes in the database (FHCA-5356)
|
||||
SELECT register_migration_script('202405080101_IDEMPIERE-6123.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- May 8, 2024, 1:01:16 AM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200247,0,0,TO_TIMESTAMP('2024-05-08 01:01:16','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-05-08 01:01:16','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','REPORT_LOAD_TIMEOUT_IN_SECONDS','120','Timeout in seconds when loading a report','D','C','14e838b1-c25c-400e-b39c-61da9bf92099')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:01:42 AM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200248,0,0,TO_TIMESTAMP('2024-05-08 01:01:41','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-05-08 01:01:41','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GLOBAL_MAX_REPORT_RECORDS','100000','Max number of records allowed in a report','D','C','7030640a-1aa7-4ac7-a894-b4fe0dfde530')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:06:19 AM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The data query for the report took too much time to execute (over {0} seconds) exceeding the allowed limit',0,0,'Y',TO_TIMESTAMP('2024-05-08 01:06:18','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-05-08 01:06:18','YYYY-MM-DD HH24:MI:SS'),100,200893,'ReportQueryTimeout','D','5f17f55f-adbe-4d97-bf83-9447983b4946')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:07:10 AM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The report data exceeds the maximum limit of {0} rows',0,0,'Y',TO_TIMESTAMP('2024-05-08 01:07:09','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-05-08 01:07:09','YYYY-MM-DD HH24:MI:SS'),100,200894,'ReportMaxRowsReached','D','a4b55c31-0df0-4302-a62a-91cb7e79be0d')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
-- IDEMPIERE-6040 Improvements for CSV import template
|
||||
SELECT register_migration_script('202405131534_IDEMPIERE-6040.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- May 13, 2024, 3:34:49 PM CEST
|
||||
UPDATE AD_Ref_List SET Name='Comma-separated values (CSV)',Updated=TO_TIMESTAMP('2024-05-13 15:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200704
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:35:58 PM CEST
|
||||
UPDATE AD_Ref_List SET Name='Excel (XLS/XLSX)',Updated=TO_TIMESTAMP('2024-05-13 15:35:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200706
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:36:02 PM CEST
|
||||
UPDATE AD_Ref_List SET IsActive='N',Updated=TO_TIMESTAMP('2024-05-13 15:36:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200705
|
||||
;
|
||||
|
||||
UPDATE AD_ImportTemplate SET ImportTemplateType='XLSX' WHERE ImportTemplateType='XLS'
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:59:49 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=120, ColumnSpan=2,Updated=TO_TIMESTAMP('2024-05-13 15:59:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208476
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-5728
|
||||
SELECT register_migration_script('202405151228_IDEMPIERE-5728.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- May 15, 2024, 12:28:30 PM CEST
|
||||
UPDATE AD_ViewColumn SET ColumnName='RV_UnPosted_UU',Updated=TO_TIMESTAMP('2024-05-15 12:28:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_ViewColumn_ID=217690
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
-- IDEMPIERE-6166 PostgreSQL DUAL table with more than one record
|
||||
SELECT register_migration_script('202406072107_IDEMPIERE-6166.sql') FROM dual;
|
||||
|
||||
-- placeholder, this is just required for postgresql
|
||||
|
||||
|
|
@ -0,0 +1,161 @@
|
|||
-- IDEMPIERE-6167 BOM Price List must search just for Verified BOMs
|
||||
SELECT register_migration_script('202406072206_IDEMPIERE-6167.sql') FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICELIMIT
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceLimit.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return Limit Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricelimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricelimit;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICELIST
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceList.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return List Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricelist (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
-- DBMS_OUTPUT.PUT_LINE('Qry=' || bom.BOMQty || ' @ ' || v_ProductPrice || ', Price=' || v_Price);
|
||||
END LOOP; -- BOM
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricelist;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICESTD
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceStd.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return Standard Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricestd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
END LOOP; -- BOM
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricestd;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
-- IDEMPIERE-6169 Performance on AD_ChangeLog with Record_UU
|
||||
SELECT register_migration_script('202406131736_IDEMPIERE-6169.sql') FROM dual;
|
||||
|
||||
ALTER TABLE ad_changelog DROP CONSTRAINT ad_changelog_key
|
||||
;
|
||||
|
||||
DROP INDEX ad_changelog_key
|
||||
;
|
||||
|
||||
ALTER TABLE ad_changelog ADD CONSTRAINT ad_changelog_pkey PRIMARY KEY (ad_session_id, ad_column_id, ad_changelog_id)
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
-- IDEMPIERE-6176 UUID indexes without constraint
|
||||
SELECT register_migration_script('202406180027_IDEMPIERE-6176.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Jun 18, 2024, 12:29:20 AM CEST
|
||||
UPDATE AD_IndexColumn SET IsActive='N',Updated=TO_TIMESTAMP('2024-06-18 00:29:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_IndexColumn_ID=200980
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:29:27 AM CEST
|
||||
UPDATE AD_TableIndex SET IsActive='N', IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:29:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=200806
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:30:44 AM CEST
|
||||
UPDATE AD_TableIndex SET IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:30:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=201272
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:31:49 AM CEST
|
||||
UPDATE AD_TableIndex SET IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:31:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=201275
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
-- IDEMPIERE-6188 Read-Only Session
|
||||
SELECT register_migration_script('202407061229_IDEMPIERE-6188.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Jul 6, 2024, 12:29:56 PM CEST
|
||||
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203938,0,0,'Y',TO_TIMESTAMP('2024-07-06 12:29:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:29:42','YYYY-MM-DD HH24:MI:SS'),100,'IsReadOnlySession','Read Only Session',NULL,NULL,'Read Only Session','D','6ee179e4-9573-4a3d-8815-23723ef241d7')
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:19 PM CEST
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,DefaultValue,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,IsPartitionKey) VALUES (216614,0,'Read Only Session',200174,'IsReadOnlySession','N',1,'N','N','Y','N','N',0,'N',20,0,0,'Y',TO_TIMESTAMP('2024-07-06 12:30:18','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:30:18','YYYY-MM-DD HH24:MI:SS'),100,203938,'Y','N','D','N','N','N','Y','8c255baa-fbec-4a90-a43d-5461060368e9','Y',0,'N','N','N','N')
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:29 PM CEST
|
||||
ALTER TABLE AD_UserPreference ADD IsReadOnlySession CHAR(1) DEFAULT 'N' CHECK (IsReadOnlySession IN ('Y','N')) NOT NULL
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:45 PM CEST
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan) VALUES (208494,'Read Only Session',200189,216614,'Y',1,170,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-07-06 12:30:45','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:30:45','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f69131e7-4fca-4011-89d5-650ca506c920','Y',170,2,2)
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206133
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206134
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206407
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208189
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=150, XPosition=5,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208494
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:25 PM CEST
|
||||
UPDATE AD_Field SET IsQuickEntry='Y',Updated=TO_TIMESTAMP('2024-07-06 12:31:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208494
|
||||
;
|
||||
|
||||
-- Jul 9, 2024, 7:48:40 PM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Read-only session',0,0,'Y',TO_TIMESTAMP('2024-07-09 19:48:39','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-09 19:48:39','YYYY-MM-DD HH24:MI:SS'),100,200900,'ReadOnlySession','D','dc819f55-662d-4d30-b68d-0a93b46a8458')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
-- IDEMPIERE-6196
|
||||
SELECT register_migration_script('202407231647_IDEMPIERE-6196.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Jul 23, 2024, 4:47:40 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=30,Updated=TO_TIMESTAMP('2024-07-23 16:47:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=103
|
||||
;
|
||||
|
||||
-- Jul 23, 2024, 4:47:43 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-07-23 16:47:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=102
|
||||
;
|
||||
|
||||
-- Jul 23, 2024, 4:47:52 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-07-23 16:47:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=107
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
-- IDEMPIERE-6189 Performance: queries on RV_C_Invoice doing unnecesary index or seq scan
|
||||
SELECT register_migration_script('202408191316_IDEMPIERE-6189.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Aug 19, 2024, 1:16:19 PM CEST
|
||||
UPDATE AD_ViewComponent SET FromClause='FROM c_invoice i
|
||||
LEFT JOIN c_doctype d ON i.c_doctype_id = d.c_doctype_id
|
||||
LEFT JOIN c_bpartner b ON i.c_bpartner_id = b.c_bpartner_id
|
||||
LEFT JOIN c_bpartner_location bpl ON i.c_bpartner_location_id = bpl.c_bpartner_location_id
|
||||
LEFT JOIN c_location loc ON bpl.c_location_id = loc.c_location_id',Updated=TO_TIMESTAMP('2024-08-19 13:16:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_ViewComponent_ID=200116
|
||||
;
|
||||
|
||||
-- Aug 19, 2024, 1:16:27 PM CEST
|
||||
CREATE OR REPLACE VIEW RV_C_Invoice(C_Invoice_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocumentNo, DocStatus, DocAction, IsPrinted, IsDiscountPrinted, Processing, Processed, IsTransferred, IsPaid, C_DocType_ID, C_DocTypeTarget_ID, C_Order_ID, Description, IsApproved, SalesRep_ID, DateInvoiced, DatePrinted, DateAcct, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, C_BP_Group_ID, POReference, DateOrdered, C_Currency_ID, C_ConversionType_ID, PaymentRule, C_PaymentTerm_ID, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID, IsPayScheduleValid, InvoiceCollectionType, C_Country_ID, C_Region_ID, Postal, City, C_Charge_ID, ChargeAmt, TotalLines, GrandTotal, Multiplier, C_Invoice_AD_OrgTrx_ID, C_Invoice_C_ConversionType_ID, C_DunningLevel_ID, C_Payment_ID, c_invoice_dateordered, DunningGrace, GenerateTo, IsInDispute, c_invoice_ispayschedulevalid, c_invoice_isselfservice, IsTaxIncluded, M_RMA_ID, Posted, ProcessedOn, Ref_Invoice_ID, Reversal_ID, SendEMail, User1_ID, User2_ID, c_bp_acqusitioncost, c_bp_actuallifetimevalue, c_bp_ad_language, C_BP_AD_OrgBP_ID, C_BP_AD_Org_ID, C_BP_BPartner_Parent_ID, C_BP_C_Dunning_ID, C_BP_C_Greeting_ID, C_BP_C_InvoiceSchedule_ID, C_BP_C_PaymentTerm_ID, c_bp_created, C_BP_CreatedBy, C_BP_C_TaxGroup_ID, c_bp_deliveryrule, c_bp_deliveryviarule, c_bp_description, c_bp_dunninggrace, c_bp_duns, c_bp_firstsale, c_bp_flatdiscount, c_bp_freightcostrule, c_bp_invoicerule, c_bp_isactive, c_bp_iscustomer, c_bp_isdiscountprinted, c_bp_isemployee, c_bp_ismanufacturer, c_bp_isonetime, c_bp_ispotaxexempt, c_bp_isprospect, c_bp_issalesrep, c_bp_issummary, c_bp_istaxexempt, c_bp_isvendor, C_BP_Logo_ID, C_BP_M_DiscountSchema_ID, C_BP_M_PriceList_ID, c_bp_naics, c_bp_name, c_bp_name2, c_bp_numberemployees, c_bp_paymentrule, c_bp_paymentrulepo, C_BP_PO_DiscountSchema_ID, C_BP_PO_PaymentTerm_ID, C_BP_PO_PriceList_ID, c_bp_poreference, c_bp_potentiallifetimevalue, c_bp_rating, c_bp_referenceno, C_BP_SalesRep_ID, c_bp_salesvolume, c_bp_sendemail, c_bp_shareofcustomer, c_bp_shelflifeminpct, c_bp_so_creditlimit, c_bp_socreditstatus, c_bp_so_creditused, c_bp_so_description, TaxID, c_bp_totalopenbalance, c_bp_updated, C_BP_UpdatedBy, c_bp_url, c_bp_value, C_BP_Location_AD_Org_ID, C_BP_Location_C_BPartner_ID, C_BP_Location_C_Location_ID, c_bp_location_created, C_BP_Location_CreatedBy, C_SalesRegion_ID, c_bp_location_fax, c_bp_location_isactive, IsBillTo, ISDN, IsPayFrom, IsRemitTo, IsShipTo,
|
||||
c_bp_location_name, c_bp_location_phone, c_bp_location_phone2, c_bp_location_updated, C_BP_Location_UpdatedBy, Address1, Address2, Address3, Address4, C_Location_AD_Org_ID, C_City_ID, c_location_created, C_Location_CreatedBy, c_location_isactive, Postal_Add, RegionName, c_location_updated, C_Location_UpdatedBy) AS
|
||||
SELECT i.c_invoice_id AS C_Invoice_ID, i.ad_client_id AS AD_Client_ID, i.ad_org_id AS AD_Org_ID, i.isactive AS IsActive, i.created AS Created, i.createdby AS CreatedBy, i.updated AS Updated, i.updatedby AS UpdatedBy, i.issotrx AS IsSOTrx, i.documentno AS DocumentNo, i.docstatus AS DocStatus, i.docaction AS DocAction, i.isprinted AS IsPrinted, i.isdiscountprinted AS IsDiscountPrinted, i.processing AS Processing, i.processed AS Processed, i.istransferred AS IsTransferred, i.ispaid AS IsPaid, i.c_doctype_id AS C_DocType_ID, i.c_doctypetarget_id AS C_DocTypeTarget_ID, i.c_order_id AS C_Order_ID, i.description AS Description, i.isapproved AS IsApproved, i.salesrep_id AS SalesRep_ID, i.dateinvoiced AS DateInvoiced, i.dateprinted AS DatePrinted, i.dateacct AS DateAcct, i.c_bpartner_id AS C_BPartner_ID, i.c_bpartner_location_id AS C_BPartner_Location_ID, i.ad_user_id AS AD_User_ID, b.c_bp_group_id AS C_BP_Group_ID, i.poreference AS POReference, i.dateordered AS DateOrdered, i.c_currency_id AS C_Currency_ID, i.c_conversiontype_id AS C_ConversionType_ID, i.paymentrule AS PaymentRule, i.c_paymentterm_id AS C_PaymentTerm_ID, i.m_pricelist_id AS M_PriceList_ID, i.c_campaign_id AS C_Campaign_ID, i.c_project_id AS C_Project_ID, i.c_activity_id AS C_Activity_ID, i.ispayschedulevalid AS IsPayScheduleValid, i.invoicecollectiontype AS InvoiceCollectionType, loc.c_country_id AS C_Country_ID, loc.c_region_id AS C_Region_ID, loc.postal AS Postal, loc.city AS City, i.c_charge_id AS C_Charge_ID, CASE WHEN charat(d.docbasetype, 3) = 'C' THEN i.chargeamt * '-1' ELSE i.chargeamt END AS ChargeAmt, CASE WHEN charat(d.docbasetype, 3) = 'C' THEN i.totallines * '-1' ELSE i.totallines END AS TotalLines, CASE WHEN charat(d.docbasetype, 3) = 'C' THEN i.grandtotal * '-1' ELSE i.grandtotal END AS GrandTotal, CASE WHEN charat(d.docbasetype, 3) = 'C' THEN -1 ELSE 1 END AS Multiplier, i.ad_orgtrx_id AS C_Invoice_AD_OrgTrx_ID, i.c_conversiontype_id AS C_Invoice_C_ConversionType_ID, i.c_dunninglevel_id AS C_DunningLevel_ID, i.c_payment_id AS C_Payment_ID, i.dateordered AS c_invoice_dateordered, i.dunninggrace AS DunningGrace, i.generateto AS GenerateTo, i.isindispute AS IsInDispute, i.ispayschedulevalid AS c_invoice_ispayschedulevalid, i.isselfservice AS c_invoice_isselfservice, i.istaxincluded AS IsTaxIncluded, i.m_rma_id AS M_RMA_ID, i.posted AS Posted, i.processedon AS ProcessedOn, i.ref_invoice_id AS Ref_Invoice_ID, i.reversal_id AS Reversal_ID, i.sendemail AS SendEMail,
|
||||
i.user1_id AS User1_ID, i.user2_id AS User2_ID, b.acqusitioncost AS c_bp_acqusitioncost, b.actuallifetimevalue AS c_bp_actuallifetimevalue, b.ad_language AS c_bp_ad_language, b.ad_orgbp_id AS C_BP_AD_OrgBP_ID, b.ad_org_id AS C_BP_AD_Org_ID, b.bpartner_parent_id AS C_BP_BPartner_Parent_ID, b.c_dunning_id AS C_BP_C_Dunning_ID, b.c_greeting_id AS C_BP_C_Greeting_ID, b.c_invoiceschedule_id AS C_BP_C_InvoiceSchedule_ID, b.c_paymentterm_id AS C_BP_C_PaymentTerm_ID, b.created AS c_bp_created, b.createdby AS C_BP_CreatedBy, b.c_taxgroup_id AS C_BP_C_TaxGroup_ID, b.deliveryrule AS c_bp_deliveryrule, b.deliveryviarule AS c_bp_deliveryviarule, b.description AS c_bp_description, b.dunninggrace AS c_bp_dunninggrace, b.duns AS c_bp_duns, b.firstsale AS c_bp_firstsale, b.flatdiscount AS c_bp_flatdiscount, b.freightcostrule AS c_bp_freightcostrule, b.invoicerule AS c_bp_invoicerule, b.isactive AS c_bp_isactive, b.iscustomer AS c_bp_iscustomer, b.isdiscountprinted AS c_bp_isdiscountprinted, b.isemployee AS c_bp_isemployee, b.ismanufacturer AS c_bp_ismanufacturer, b.isonetime AS c_bp_isonetime, b.ispotaxexempt AS c_bp_ispotaxexempt, b.isprospect AS c_bp_isprospect, b.issalesrep AS c_bp_issalesrep, b.issummary AS c_bp_issummary, b.istaxexempt AS c_bp_istaxexempt, b.isvendor AS c_bp_isvendor, b.logo_id AS C_BP_Logo_ID, b.m_discountschema_id AS C_BP_M_DiscountSchema_ID, b.m_pricelist_id AS C_BP_M_PriceList_ID, b.naics AS c_bp_naics, b.name AS c_bp_name, b.name2 AS c_bp_name2, b.numberemployees AS c_bp_numberemployees, b.paymentrule AS c_bp_paymentrule, b.paymentrulepo AS c_bp_paymentrulepo, b.po_discountschema_id AS C_BP_PO_DiscountSchema_ID, b.po_paymentterm_id AS C_BP_PO_PaymentTerm_ID, b.po_pricelist_id AS C_BP_PO_PriceList_ID, b.poreference AS c_bp_poreference, b.potentiallifetimevalue AS c_bp_potentiallifetimevalue, b.rating AS c_bp_rating, b.referenceno AS c_bp_referenceno, b.salesrep_id AS C_BP_SalesRep_ID, b.salesvolume AS c_bp_salesvolume, b.sendemail AS c_bp_sendemail, b.shareofcustomer AS c_bp_shareofcustomer, b.shelflifeminpct AS c_bp_shelflifeminpct, b.so_creditlimit AS c_bp_so_creditlimit, b.socreditstatus AS c_bp_socreditstatus, b.so_creditused AS c_bp_so_creditused, b.so_description AS c_bp_so_description, b.taxid AS TaxID, b.totalopenbalance AS c_bp_totalopenbalance, b.updated AS c_bp_updated, b.updatedby AS C_BP_UpdatedBy, b.url AS c_bp_url, b.value AS c_bp_value, bpl.ad_org_id AS C_BP_Location_AD_Org_ID, bpl.c_bpartner_id AS C_BP_Location_C_BPartner_ID,
|
||||
bpl.c_location_id AS C_BP_Location_C_Location_ID, bpl.created AS c_bp_location_created, bpl.createdby AS C_BP_Location_CreatedBy, bpl.c_salesregion_id AS C_SalesRegion_ID, bpl.fax AS c_bp_location_fax, bpl.isactive AS c_bp_location_isactive, bpl.isbillto AS IsBillTo, bpl.isdn AS ISDN, bpl.ispayfrom AS IsPayFrom, bpl.isremitto AS IsRemitTo, bpl.isshipto AS IsShipTo, bpl.name AS c_bp_location_name, bpl.phone AS c_bp_location_phone, bpl.phone2 AS c_bp_location_phone2, bpl.updated AS c_bp_location_updated, bpl.updatedby AS C_BP_Location_UpdatedBy, loc.address1 AS Address1, loc.address2 AS Address2, loc.address3 AS Address3, loc.address4 AS Address4, loc.ad_org_id AS C_Location_AD_Org_ID, loc.c_city_id AS C_City_ID, loc.created AS c_location_created, loc.createdby AS C_Location_CreatedBy, loc.isactive AS c_location_isactive, loc.postal_add AS Postal_Add, loc.regionname AS RegionName, loc.updated AS c_location_updated, loc.updatedby AS C_Location_UpdatedBy FROM c_invoice i
|
||||
LEFT JOIN c_doctype d ON i.c_doctype_id = d.c_doctype_id
|
||||
LEFT JOIN c_bpartner b ON i.c_bpartner_id = b.c_bpartner_id
|
||||
LEFT JOIN c_bpartner_location bpl ON i.c_bpartner_location_id = bpl.c_bpartner_location_id
|
||||
LEFT JOIN c_location loc ON bpl.c_location_id = loc.c_location_id
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6216
|
||||
SELECT register_migration_script('202408201236_IDEMPIERE-6216.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Aug 20, 2024, 12:36:08 PM CEST
|
||||
UPDATE AD_Process_Para SET MandatoryLogic='@UseDefaultCoA@=N',Updated=TO_TIMESTAMP('2024-08-20 12:36:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=53296
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
-- Adding new fields to AD_PInstance and AD_PInstance_Log
|
||||
SELECT register_migration_script('202409041533_IDEMPIERE-6223.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 4, 2024, 3:33:12 PM BRT
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml,IsPartitionKey) VALUES (216788,0,'JSON Data','The json field stores json data.',282,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-09-04 15:33:12','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:33:12','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','6ec3e423-205d-482f-b7e2-3dea6b66d5d0','Y',0,'N','N','N','N','N')
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:33:16 PM BRT
|
||||
ALTER TABLE AD_PInstance ADD JsonData CLOB DEFAULT NULL CONSTRAINT AD_PInstance_JsonData_isjson CHECK (JsonData IS JSON)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:33:39 PM BRT
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan,NumLines) VALUES (208511,'JSON Data','The json field stores json data.',663,216788,'Y',0,210,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-09-04 15:33:39','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:33:39','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','2455e488-36a8-48d2-8410-2ff0808915e4','Y',200,2,5)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=110, XPosition=1, ColumnSpan=5,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208511
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10501
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207416
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10495
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202845
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=160,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202847
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=170,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207405
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=180,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207407
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=190,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207406
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=200,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207408
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207720
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:40 PM BRT
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml,IsPartitionKey) VALUES (216789,0,'JSON Data','The json field stores json data.',578,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-09-04 15:34:40','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:34:40','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','7539f67f-922d-4e27-881f-c04f0dc8c160','Y',0,'N','N','N','N','N')
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:43 PM BRT
|
||||
ALTER TABLE AD_PInstance_Log ADD JsonData CLOB DEFAULT NULL CONSTRAINT AD_PInstance_Log_JsonData_isjson CHECK (JsonData IS JSON)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:35:54 PM BRT
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan,NumLines) VALUES (208512,'JSON Data','The json field stores json data.',665,216789,'Y',0,100,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-09-04 15:35:54','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:35:54','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','27e958ae-9e31-4e8b-824e-e571df7da15c','Y',100,2,5)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=70, XPosition=1, ColumnSpan=5,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208512
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200309
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=90,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200310
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207622
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204554
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
-- IDEMPIERE-5567 Permalink for UUID multi-key tables
|
||||
SELECT register_migration_script('202409141654_IDEMPIERE-5567.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 14, 2024, 4:54:43 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,201,111,200009,TO_TIMESTAMP('2024-09-14 16:54:42','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:54:42','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','f8ddf8c5-4bf6-4343-a2f3-c88c1f007344','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:56:45 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,378,111,200010,TO_TIMESTAMP('2024-09-14 16:56:45','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:56:45','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','32bab358-373f-476a-a52c-5c700044478d','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:57:50 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,197,111,200011,TO_TIMESTAMP('2024-09-14 16:57:50','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:57:50','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','ebea9694-6348-444e-8b7f-f5f1c75a3c65','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:58:46 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,199,111,200012,TO_TIMESTAMP('2024-09-14 16:58:46','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:58:46','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','91ce33c0-fb91-4c9e-894e-8e8f49d7677f','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6007
|
||||
SELECT register_migration_script('202409141807_IDEMPIERE-6007.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 14, 2024, 6:07:20 PM CEST
|
||||
UPDATE AD_Field SET ReadOnlyLogic='@SQL=SELECT 1 FROM AD_Field WHERE AD_Tab_ID=@AD_Tab_ID:0@',Updated=TO_TIMESTAMP('2024-09-14 18:07:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=131
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6248
|
||||
SELECT register_migration_script('202409231820_IDEMPIERE-6248.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 23, 2024, 6:20:30 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200250,0,0,TO_TIMESTAMP('2024-09-23 18:20:29','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-23 18:20:29','YYYY-MM-DD HH24:MI:SS'),10,10,'Y','FULL_EXCEPTION_TRACE_IN_LOG','N','If set to Y, the stack trace is not cut in the log (see https://idempiere.atlassian.net/browse/IDEMPIERE-6248)','D','S','8308ac18-d0a6-479f-ab59-7edd0bcb0b54')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
-- IDEMPIERE-6248
|
||||
SELECT register_migration_script('202409231821_IDEMPIERE-6248_DelSysConfig.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
DELETE FROM AD_SysConfig WHERE AD_SysConfig_ID = 200250
|
||||
;
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
-- IDEMPIERE-5760 Manage mail.smtp.timeout using SysConfig
|
||||
SELECT register_migration_script('202409241248_IDEMPIERE-5760.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Sep 24, 2024, 12:48:56 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200253,0,0,TO_TIMESTAMP('2024-09-24 12:48:55','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-24 12:48:55','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','MAIL_SMTP_CONNECTIONTIMEOUT','-1','Timeout in milliseconds to wait for SMTP connection, -1 leaves the java default','D','C','36be68b7-7b4b-4725-9a51-aeb11bb7b699')
|
||||
;
|
||||
|
||||
-- Sep 24, 2024, 12:49:10 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200254,0,0,TO_TIMESTAMP('2024-09-24 12:49:09','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-24 12:49:09','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','MAIL_SMTP_WRITETIMEOUT','-1','Timeout in milliseconds to wait for writing on SMTP connection, -1 leaves the java default','D','C','e11d83c4-8500-400a-b9d2-358c30c910fb')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
-- IDEMPIERE-6196_SysConfig
|
||||
SELECT register_migration_script('202410071412_IDEMPIERE-6196.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Oct 7, 2024, 2:12:19 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-10-07 14:12:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50195
|
||||
;
|
||||
|
||||
-- Oct 7, 2024, 2:12:23 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-10-07 14:12:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50197
|
||||
;
|
||||
|
||||
-- Oct 7, 2024, 2:12:27 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=30,Updated=TO_TIMESTAMP('2024-10-07 14:12:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50196
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
-- IDEMPIERE-6317
|
||||
SELECT register_migration_script('202411260821_IDEMPIERE-6317.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Nov 26, 2024, 8:34:46 AM BRT
|
||||
UPDATE AD_Message SET Value='Can''t Save Tenant Level',Updated=TO_TIMESTAMP('2024-11-26 08:34:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=53010
|
||||
;
|
||||
|
||||
-- Nov 26, 2024, 8:36:49 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','This is a system or tenant parameter, you can''t save it as organization parameter',0,0,'Y',TO_TIMESTAMP('2024-11-26 08:36:48','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-11-26 08:36:48','YYYY-MM-DD HH24:MI:SS'),100,200914,'ThisIsSystemOrTenantParameter','D','8980c935-1c23-4d83-8b26-70eb3a749797')
|
||||
;
|
||||
|
||||
-- Nov 26, 2024, 8:38:56 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','This is a system parameter, you can''t save it as tenant parameter',0,0,'Y',TO_TIMESTAMP('2024-11-26 08:38:55','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-11-26 08:38:55','YYYY-MM-DD HH24:MI:SS'),100,200915,'ThisIsSystemParameter','D','6e6b2060-ec2d-4d87-b499-7250e93f7cec')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,676 @@
|
|||
-- IDEMPIERE-6329 Bug in BOM* SQL functions not getting the correct BOM children
|
||||
SELECT register_migration_script('202411301155_IDEMPIERE-6329.sql') FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICELIMIT
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceLimit.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return Limit Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricelimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricelimit;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICELIST
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceList.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return List Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricelist (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
-- DBMS_OUTPUT.PUT_LINE('Qry=' || bom.BOMQty || ' @ ' || v_ProductPrice || ', Price=' || v_Price);
|
||||
END LOOP; -- BOM
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricelist;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMPRICESTD
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
PriceList_Version_ID IN NUMBER
|
||||
)
|
||||
RETURN NUMBER
|
||||
/*************************************************************************
|
||||
* The contents of this file are subject to the Compiere License. You may
|
||||
* obtain a copy of the License at http://www.compiere.org/license.html
|
||||
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
* express or implied. See the License for details. Code: Compiere ERP+CRM
|
||||
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
|
||||
*************************************************************************
|
||||
* $Id: BOM_PriceStd.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
|
||||
***
|
||||
* Title: Return Standard Price of Product/BOM
|
||||
* Description:
|
||||
* if not found: 0
|
||||
************************************************************************/
|
||||
AS
|
||||
v_Price NUMBER;
|
||||
v_ProductPrice NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_PRODUCTPRICE
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
v_ProductPrice := Bompricestd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
|
||||
END LOOP; -- BOM
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
END Bompricestd;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQTYONHANDFORRESERVATION
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
Warehouse_ID IN NUMBER,
|
||||
Locator_ID IN NUMBER -- Only used, if warehouse is null
|
||||
)
|
||||
RETURN NUMBER
|
||||
/******************************************************************************
|
||||
* ** Compiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
||||
* Open Source Software Provided "AS IS" without warranty or liability
|
||||
* When you use any parts (changed or unchanged), add "Powered by Compiere" to
|
||||
* your product name; See license details http://www.compiere.org/license.html
|
||||
******************************************************************************
|
||||
* Return quantity on hand for BOM
|
||||
*/
|
||||
AS
|
||||
myWarehouse_ID NUMBER;
|
||||
Quantity NUMBER := 99999; -- unlimited
|
||||
IsBOM CHAR(1);
|
||||
IsStocked CHAR(1);
|
||||
ProductType CHAR(1);
|
||||
ProductQty NUMBER;
|
||||
StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || myWarehouse_ID);
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO IsBOM, ProductType, IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (IsBOM='N' AND (ProductType<>'I' OR IsStocked='N')) THEN
|
||||
RETURN Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(QtyOnHand), 0)
|
||||
INTO ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
--
|
||||
-- DBMS_OUTPUT.PUT_LINE('Qty=' || ProductQty);
|
||||
RETURN ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(QtyOnHand), 0)
|
||||
INTO ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
ProductQty := ROUND (ProductQty/bom.BOMQty, StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ProductQty := BomqtyonhandForReservation (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (Quantity, StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END BOMQTYONHANDFORRESERVATION;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQTYONHAND
|
||||
(
|
||||
Product_ID IN NUMBER,
|
||||
Warehouse_ID IN NUMBER,
|
||||
Locator_ID IN NUMBER -- Only used, if warehouse is null
|
||||
)
|
||||
RETURN NUMBER
|
||||
/******************************************************************************
|
||||
* ** Compiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
||||
* Open Source Software Provided "AS IS" without warranty or liability
|
||||
* When you use any parts (changed or unchanged), add "Powered by Compiere" to
|
||||
* your product name; See license details http://www.compiere.org/license.html
|
||||
******************************************************************************
|
||||
* Return quantity on hand for BOM
|
||||
*/
|
||||
AS
|
||||
myWarehouse_ID NUMBER;
|
||||
Quantity NUMBER := 99999; -- unlimited
|
||||
IsBOM CHAR(1);
|
||||
IsStocked CHAR(1);
|
||||
ProductType CHAR(1);
|
||||
ProductQty NUMBER;
|
||||
StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || myWarehouse_ID);
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO IsBOM, ProductType, IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (IsBOM='N' AND (ProductType<>'I' OR IsStocked='N')) THEN
|
||||
RETURN Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(QtyOnHand), 0)
|
||||
INTO ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
--
|
||||
-- DBMS_OUTPUT.PUT_LINE('Qty=' || ProductQty);
|
||||
RETURN ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(QtyOnHand), 0)
|
||||
INTO ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
ProductQty := ROUND (ProductQty/bom.BOMQty, StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
ProductQty := Bomqtyonhand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (ProductQty < Quantity) THEN
|
||||
Quantity := ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (Quantity, StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END Bomqtyonhand;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQTYORDERED
|
||||
(
|
||||
p_Product_ID IN NUMBER,
|
||||
p_Warehouse_ID IN NUMBER,
|
||||
p_Locator_ID IN NUMBER -- Only used, if warehouse is null
|
||||
)
|
||||
RETURN NUMBER
|
||||
/******************************************************************************
|
||||
* ** Compiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
||||
* Open Source Software Provided "AS IS" without warranty or liability
|
||||
* When you use any parts (changed or unchanged), add "Powered by Compiere" to
|
||||
* your product name; See license details http://www.compiere.org/license.html
|
||||
******************************************************************************
|
||||
* Return quantity ordered for BOM
|
||||
*/
|
||||
AS
|
||||
v_Warehouse_ID NUMBER;
|
||||
v_Quantity NUMBER := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty NUMBER;
|
||||
v_StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID);
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := Bomqtyordered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
END IF;
|
||||
--
|
||||
RETURN 0;
|
||||
END Bomqtyordered;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQTYRESERVED
|
||||
(
|
||||
p_Product_ID IN NUMBER,
|
||||
p_Warehouse_ID IN NUMBER,
|
||||
p_Locator_ID IN NUMBER -- Only used, if warehouse is null
|
||||
)
|
||||
RETURN NUMBER
|
||||
/******************************************************************************
|
||||
* ** Compiere Product ** Copyright (c) 1999-2001 Accorto, Inc. USA
|
||||
* Open Source Software Provided "AS IS" without warranty or liability
|
||||
* When you use any parts (changed or unchanged), add "Powered by Compiere" to
|
||||
* your product name; See license details http://www.compiere.org/license.html
|
||||
******************************************************************************
|
||||
* Return quantity reserved for BOM
|
||||
*/
|
||||
AS
|
||||
v_Warehouse_ID NUMBER;
|
||||
v_Quantity NUMBER := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty NUMBER;
|
||||
v_StdPrecision NUMBER;
|
||||
-- Get BOM Product info
|
||||
CURSOR CUR_BOM IS
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y';
|
||||
--
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
-- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID);
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
-- DBMS_OUTPUT.PUT_LINE('BOM');
|
||||
FOR bom IN CUR_BOM LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT NVL(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := Bomqtyreserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT NVL(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END Bomqtyreserved;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
-- IDEMPIERE-6327 Interest Area Window: Subscription tab should not enable "Insert Record"
|
||||
SELECT register_migration_script('202412021125_IDEMPIERE-6327.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Dec 2, 2024, 11:25:16 AM MYT
|
||||
UPDATE AD_Tab SET IsInsertRecord='N',Updated=TO_TIMESTAMP('2024-12-02 11:25:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=536
|
||||
;
|
||||
|
||||
-- Dec 2, 2024, 11:25:32 AM MYT
|
||||
UPDATE AD_Field SET IsReadOnly='Y',Updated=TO_TIMESTAMP('2024-12-02 11:25:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=7625
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
--
|
||||
SELECT register_migration_script('202412041755_IDEMPIERE-6334.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Dec 4, 2024, 5:55:11 PM CET
|
||||
UPDATE AD_Tab SET IsAdvancedTab='Y',Updated=TO_TIMESTAMP('2024-12-04 17:55:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200329
|
||||
;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-6335
|
||||
SELECT register_migration_script('202412101102_IDEMPIERE-6335.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Dec 10, 2024, 11:06:45 AM BRT
|
||||
INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,AD_Val_Rule_ID,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete,DateRangeOption,IsShowNegateButton) VALUES (200484,0,0,'Y',TO_TIMESTAMP('2024-12-10 11:06:44','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-12-10 11:06:44','YYYY-MM-DD HH24:MI:SS'),100,'Document Type','Document type or rules','The Document Type determines document sequence and processing rules',142,20,19,'N',52054,0,'N','C_DocType_ID','Y','D',196,'2b9ac743-0893-474a-aa96-c1eafe8fba86','N','N','D','N')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-2981 - Implement JSON Field type
|
||||
SELECT register_migration_script('202402261300_IDEMPIERE-2981.sql') FROM dual;
|
||||
|
||||
-- Feb 26, 2024, 1:00:29 PM CET
|
||||
INSERT INTO AD_Reference (AD_Reference_ID,Name,Description,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU,ShowInactive) VALUES (200267,'JSON','JSON format values','D',0,0,'Y',TO_TIMESTAMP('2024-02-26 13:00:28','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:00:28','YYYY-MM-DD HH24:MI:SS'),100,'D','N','b6fcc751-edd8-4421-acd0-3cde02a9576d','N')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
-- IDEMPIERE-2981 - Implement JSON Field type
|
||||
SELECT register_migration_script('202402261354_IDEMPIERE-2981.sql') FROM dual;
|
||||
|
||||
-- Feb 26, 2024, 1:54:35 PM CET
|
||||
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203924,0,0,'Y',TO_TIMESTAMP('2024-02-26 13:54:35','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:54:35','YYYY-MM-DD HH24:MI:SS'),100,'JsonData','JSON Data','The json field stores json data.','JSON Data','D','c4ea7a81-96a9-4a5d-bb87-e913e1c8ed48')
|
||||
;
|
||||
|
||||
-- Feb 26, 2024, 1:55:37 PM CET
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,IsPartitionKey) VALUES (216570,0,'JSON Data','The json field stores json data.',135,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-02-26 13:55:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:55:36','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','927b83df-d161-4332-ad44-8ffed99e8cf4','Y',0,'N','N','N','N')
|
||||
;
|
||||
|
||||
-- Feb 26, 2024, 1:55:55 PM CET
|
||||
ALTER TABLE Test ADD COLUMN JsonData JSON DEFAULT NULL
|
||||
;
|
||||
|
||||
-- Feb 26, 2024, 1:56:08 PM CET
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (208472,'JSON Data','The json field stores json data.',152,216570,'Y',100,310,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-02-26 13:56:08','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-26 13:56:08','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','e47ef529-71ba-4f9b-9014-b188e17e8ef4','Y',290,5)
|
||||
;
|
||||
|
||||
-- Feb 29, 2024, 1:52:50 PM CET
|
||||
UPDATE AD_Field SET NumLines=5,Updated=TO_TIMESTAMP('2024-02-29 13:52:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208472
|
||||
;
|
||||
|
||||
-- Feb 29, 2024, 2:07:30 PM CET
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Invalid JSON',0,0,'Y',TO_TIMESTAMP('2024-02-29 14:07:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-02-29 14:07:30','YYYY-MM-DD HH24:MI:SS'),100,200876,'InvalidJSON','D','a263376f-a12e-4943-92f1-7d7ce8a67a2b')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6110
|
||||
SELECT register_migration_script('202404171125_IDEMPIERE-6110.sql') FROM dual;
|
||||
|
||||
-- Apr 17, 2024, 11:25:53 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Products or charges configured as ''Freight Product'' or ''Freight Charge'' cannot be added to this order due to the combination of delivery via rule and freight cost rule',0,0,'Y',TO_TIMESTAMP('2024-04-17 11:25:53','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-04-17 11:25:53','YYYY-MM-DD HH24:MI:SS'),100,200897,'FreightOrderLineNotAllowed','D','204c8bb9-d002-4beb-bbc3-1d1a11d7471d')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
-- IDEMPIERE-5136
|
||||
SELECT register_migration_script('202404220830_IDEMPIERE-5136_MissingDropIndex.sql') FROM dual;
|
||||
|
||||
-- only for Oracle as there was a missing DROP INDEX instruction
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
-- IDEMPIERE-6123 Query in search window causing slowness and load spikes in the database (FHCA-5356)
|
||||
SELECT register_migration_script('202404302320_IDEMPIERE-6123.sql') FROM dual;
|
||||
|
||||
-- Apr 30, 2024, 11:20:08 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200244,0,0,TO_TIMESTAMP('2024-04-30 23:20:08','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-04-30 23:20:08','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GRIDTABLE_INITIAL_COUNT_TIMEOUT_IN_SECONDS','1','Timeout for the initial count on windows','D','C','5fae1af7-74ca-41d8-bbd3-d506c6c23b6a')
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:22:16 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200245,0,0,TO_TIMESTAMP('2024-04-30 23:22:16','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-04-30 23:22:16','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GLOBAL_MAX_QUERY_RECORDS','100000','Maximum number of records allowed to search in a window, can be overriden per Role or Tab','D','C','840fb67c-4609-41f2-9e20-e0ea9d839065')
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:23:28 PM CEST
|
||||
UPDATE AD_Message SET MsgText='The query returned more records than allowed, consider adding more filters.',Updated=TO_TIMESTAMP('2024-04-30 23:23:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=852
|
||||
;
|
||||
|
||||
-- Apr 30, 2024, 11:24:06 PM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The initial count query timed out, loading records ...',0,0,'Y',TO_TIMESTAMP('2024-04-30 23:24:06','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-04-30 23:24:06','YYYY-MM-DD HH24:MI:SS'),100,200887,'CountQueryTimeoutLoadBackground','D','988292d7-175f-41c2-b560-43d62b8326a9')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6137 Payment Rule does not appear in reports from Sales Order
|
||||
SELECT register_migration_script('202405071219_IDEMPIERE-6137.sql') FROM dual;
|
||||
|
||||
-- May 7, 2024, 12:19:00 PM CEST
|
||||
UPDATE AD_Column SET AD_Reference_Value_ID=195,Updated=TO_TIMESTAMP('2024-05-07 12:19:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Reference_ID=200012 AND COALESCE(AD_Reference_Value_ID,0)!=195
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
-- IDEMPIERE-6123 Query in search window causing slowness and load spikes in the database (FHCA-5356)
|
||||
SELECT register_migration_script('202405080101_IDEMPIERE-6123.sql') FROM dual;
|
||||
|
||||
-- May 8, 2024, 1:01:16 AM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200247,0,0,TO_TIMESTAMP('2024-05-08 01:01:16','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-05-08 01:01:16','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','REPORT_LOAD_TIMEOUT_IN_SECONDS','120','Timeout in seconds when loading a report','D','C','14e838b1-c25c-400e-b39c-61da9bf92099')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:01:42 AM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200248,0,0,TO_TIMESTAMP('2024-05-08 01:01:41','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-05-08 01:01:41','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','GLOBAL_MAX_REPORT_RECORDS','100000','Max number of records allowed in a report','D','C','7030640a-1aa7-4ac7-a894-b4fe0dfde530')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:06:19 AM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The data query for the report took too much time to execute (over {0} seconds) exceeding the allowed limit',0,0,'Y',TO_TIMESTAMP('2024-05-08 01:06:18','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-05-08 01:06:18','YYYY-MM-DD HH24:MI:SS'),100,200893,'ReportQueryTimeout','D','5f17f55f-adbe-4d97-bf83-9447983b4946')
|
||||
;
|
||||
|
||||
-- May 8, 2024, 1:07:10 AM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','The report data exceeds the maximum limit of {0} rows',0,0,'Y',TO_TIMESTAMP('2024-05-08 01:07:09','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-05-08 01:07:09','YYYY-MM-DD HH24:MI:SS'),100,200894,'ReportMaxRowsReached','D','a4b55c31-0df0-4302-a62a-91cb7e79be0d')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
-- IDEMPIERE-6040 Improvements for CSV import template
|
||||
SELECT register_migration_script('202405131534_IDEMPIERE-6040.sql') FROM dual;
|
||||
|
||||
-- May 13, 2024, 3:34:49 PM CEST
|
||||
UPDATE AD_Ref_List SET Name='Comma-separated values (CSV)',Updated=TO_TIMESTAMP('2024-05-13 15:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200704
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:35:58 PM CEST
|
||||
UPDATE AD_Ref_List SET Name='Excel (XLS/XLSX)',Updated=TO_TIMESTAMP('2024-05-13 15:35:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200706
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:36:02 PM CEST
|
||||
UPDATE AD_Ref_List SET IsActive='N',Updated=TO_TIMESTAMP('2024-05-13 15:36:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200705
|
||||
;
|
||||
|
||||
UPDATE AD_ImportTemplate SET ImportTemplateType='XLSX' WHERE ImportTemplateType='XLS'
|
||||
;
|
||||
|
||||
-- May 13, 2024, 3:59:49 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=120, ColumnSpan=2,Updated=TO_TIMESTAMP('2024-05-13 15:59:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208476
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-5728
|
||||
SELECT register_migration_script('202405151228_IDEMPIERE-5728.sql') FROM dual;
|
||||
|
||||
-- May 15, 2024, 12:28:30 PM CEST
|
||||
UPDATE AD_ViewColumn SET ColumnName='RV_UnPosted_UU',Updated=TO_TIMESTAMP('2024-05-15 12:28:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_ViewColumn_ID=217690
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
-- IDEMPIERE-6166 PostgreSQL DUAL table with more than one record
|
||||
SELECT register_migration_script('202406072107_IDEMPIERE-6166.sql') FROM dual;
|
||||
|
||||
DROP TABLE IF EXISTS dual
|
||||
;
|
||||
|
||||
CREATE VIEW dual AS SELECT 'X'::varchar AS dummy
|
||||
;
|
||||
|
||||
DROP RULE insert_dbreplicasyncverifier ON dbreplicasyncverifier
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION forbid_multiple_rows_in_dbreplicasyncverifier()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
-- Check if the table already contains a row
|
||||
IF (SELECT COUNT(*) FROM dbreplicasyncverifier) > 0 THEN
|
||||
RAISE EXCEPTION 'Table dbreplicasyncverifier can only contain one row.';
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql
|
||||
;
|
||||
|
||||
CREATE TRIGGER single_row_only_trigger_dbreplicasyncverifier
|
||||
BEFORE INSERT ON dbreplicasyncverifier
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION forbid_multiple_rows_in_dbreplicasyncverifier()
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
-- IDEMPIERE-6167 BOM Price List must search just for Verified BOMs
|
||||
SELECT register_migration_script('202406072206_IDEMPIERE-6167.sql') FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelimit (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelist (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricestd (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
-- IDEMPIERE-6169 Performance on AD_ChangeLog with Record_UU
|
||||
SELECT register_migration_script('202406131736_IDEMPIERE-6169.sql') FROM dual;
|
||||
|
||||
ALTER TABLE ad_changelog DROP CONSTRAINT ad_changelog_pkey
|
||||
;
|
||||
|
||||
ALTER TABLE ad_changelog ADD CONSTRAINT ad_changelog_pkey PRIMARY KEY (ad_session_id, ad_column_id, ad_changelog_id)
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
-- IDEMPIERE-6176 UUID indexes without constraint
|
||||
SELECT register_migration_script('202406180027_IDEMPIERE-6176.sql') FROM dual;
|
||||
|
||||
-- Jun 18, 2024, 12:29:20 AM CEST
|
||||
UPDATE AD_IndexColumn SET IsActive='N',Updated=TO_TIMESTAMP('2024-06-18 00:29:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_IndexColumn_ID=200980
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:29:27 AM CEST
|
||||
UPDATE AD_TableIndex SET IsActive='N', IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:29:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=200806
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:30:44 AM CEST
|
||||
UPDATE AD_TableIndex SET IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:30:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=201272
|
||||
;
|
||||
|
||||
-- Jun 18, 2024, 12:31:49 AM CEST
|
||||
UPDATE AD_TableIndex SET IsCreateConstraint='Y',Updated=TO_TIMESTAMP('2024-06-18 00:31:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_TableIndex_ID=201275
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
-- IDEMPIERE-6188 Read-Only Session
|
||||
SELECT register_migration_script('202407061229_IDEMPIERE-6188.sql') FROM dual;
|
||||
|
||||
-- Jul 6, 2024, 12:29:56 PM CEST
|
||||
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,Help,PrintName,EntityType,AD_Element_UU) VALUES (203938,0,0,'Y',TO_TIMESTAMP('2024-07-06 12:29:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:29:42','YYYY-MM-DD HH24:MI:SS'),100,'IsReadOnlySession','Read Only Session',NULL,NULL,'Read Only Session','D','6ee179e4-9573-4a3d-8815-23723ef241d7')
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:19 PM CEST
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,DefaultValue,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml,IsPartitionKey) VALUES (216614,0,'Read Only Session',200174,'IsReadOnlySession','N',1,'N','N','Y','N','N',0,'N',20,0,0,'Y',TO_TIMESTAMP('2024-07-06 12:30:18','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:30:18','YYYY-MM-DD HH24:MI:SS'),100,203938,'Y','N','D','N','N','N','Y','8c255baa-fbec-4a90-a43d-5461060368e9','Y',0,'N','N','N','N')
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:29 PM CEST
|
||||
ALTER TABLE AD_UserPreference ADD COLUMN IsReadOnlySession CHAR(1) DEFAULT 'N' CHECK (IsReadOnlySession IN ('Y','N')) NOT NULL
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:30:45 PM CEST
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan) VALUES (208494,'Read Only Session',200189,216614,'Y',1,170,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-07-06 12:30:45','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-06 12:30:45','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','f69131e7-4fca-4011-89d5-650ca506c920','Y',170,2,2)
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206133
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206134
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206407
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208189
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:06 PM CEST
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=150, XPosition=5,Updated=TO_TIMESTAMP('2024-07-06 12:31:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208494
|
||||
;
|
||||
|
||||
-- Jul 6, 2024, 12:31:25 PM CEST
|
||||
UPDATE AD_Field SET IsQuickEntry='Y',Updated=TO_TIMESTAMP('2024-07-06 12:31:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208494
|
||||
;
|
||||
|
||||
-- Jul 9, 2024, 7:48:40 PM CEST
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Read-only session',0,0,'Y',TO_TIMESTAMP('2024-07-09 19:48:39','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-07-09 19:48:39','YYYY-MM-DD HH24:MI:SS'),100,200900,'ReadOnlySession','D','dc819f55-662d-4d30-b68d-0a93b46a8458')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
-- IDEMPIERE-6196
|
||||
SELECT register_migration_script('202407231647_IDEMPIERE-6196.sql') FROM dual;
|
||||
|
||||
-- Jul 23, 2024, 4:47:40 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=30,Updated=TO_TIMESTAMP('2024-07-23 16:47:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=103
|
||||
;
|
||||
|
||||
-- Jul 23, 2024, 4:47:43 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-07-23 16:47:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=102
|
||||
;
|
||||
|
||||
-- Jul 23, 2024, 4:47:52 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-07-23 16:47:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=107
|
||||
;
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6216
|
||||
SELECT register_migration_script('202408201236_IDEMPIERE-6216.sql') FROM dual;
|
||||
|
||||
-- Aug 20, 2024, 12:36:08 PM CEST
|
||||
UPDATE AD_Process_Para SET MandatoryLogic='@UseDefaultCoA@=N',Updated=TO_TIMESTAMP('2024-08-20 12:36:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=53296
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
-- Adding new fields to AD_PInstance and AD_PInstance_Log
|
||||
SELECT register_migration_script('202409041533_IDEMPIERE-6223.sql') FROM dual;
|
||||
|
||||
-- Sep 4, 2024, 3:33:12 PM BRT
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml,IsPartitionKey) VALUES (216788,0,'JSON Data','The json field stores json data.',282,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-09-04 15:33:12','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:33:12','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','6ec3e423-205d-482f-b7e2-3dea6b66d5d0','Y',0,'N','N','N','N','N')
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:33:16 PM BRT
|
||||
ALTER TABLE AD_PInstance ADD COLUMN JsonData JSON DEFAULT NULL
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:33:39 PM BRT
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan,NumLines) VALUES (208511,'JSON Data','The json field stores json data.',663,216788,'Y',0,210,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-09-04 15:33:39','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:33:39','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','2455e488-36a8-48d2-8410-2ff0808915e4','Y',200,2,5)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=110, XPosition=1, ColumnSpan=5,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208511
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10501
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207416
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10495
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202845
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=160,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202847
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=170,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207405
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=180,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207407
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=190,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207406
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=200,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207408
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:12 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2024-09-04 15:34:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207720
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:40 PM BRT
|
||||
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml,IsPartitionKey) VALUES (216789,0,'JSON Data','The json field stores json data.',578,'JsonData',0,'N','N','N','N','N',0,'N',200267,0,0,'Y',TO_TIMESTAMP('2024-09-04 15:34:40','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:34:40','YYYY-MM-DD HH24:MI:SS'),100,203924,'Y','N','D','N','N','N','Y','7539f67f-922d-4e27-881f-c04f0dc8c160','Y',0,'N','N','N','N','N')
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:34:43 PM BRT
|
||||
ALTER TABLE AD_PInstance_Log ADD COLUMN JsonData JSON DEFAULT NULL
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:35:54 PM BRT
|
||||
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan,NumLines) VALUES (208512,'JSON Data','The json field stores json data.',665,216789,'Y',0,100,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2024-09-04 15:35:54','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-09-04 15:35:54','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','27e958ae-9e31-4e8b-824e-e571df7da15c','Y',100,2,5)
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET IsDisplayed='Y', SeqNo=70, XPosition=1, ColumnSpan=5,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208512
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200309
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=90,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200310
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=207622
|
||||
;
|
||||
|
||||
-- Sep 4, 2024, 3:36:15 PM BRT
|
||||
UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2024-09-04 15:36:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204554
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
-- IDEMPIERE-5567 Permalink for UUID multi-key tables
|
||||
SELECT register_migration_script('202409141654_IDEMPIERE-5567.sql') FROM dual;
|
||||
|
||||
-- Sep 14, 2024, 4:54:43 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,201,111,200009,TO_TIMESTAMP('2024-09-14 16:54:42','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:54:42','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','f8ddf8c5-4bf6-4343-a2f3-c88c1f007344','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:56:45 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,378,111,200010,TO_TIMESTAMP('2024-09-14 16:56:45','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:56:45','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','32bab358-373f-476a-a52c-5c700044478d','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:57:50 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,197,111,200011,TO_TIMESTAMP('2024-09-14 16:57:50','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:57:50','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','ebea9694-6348-444e-8b7f-f5f1c75a3c65','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
-- Sep 14, 2024, 4:58:46 PM CEST
|
||||
INSERT INTO AD_ZoomCondition (AD_Client_ID,AD_Org_ID,AD_Table_ID,AD_Window_ID,AD_ZoomCondition_ID,Created,CreatedBy,IsActive,Updated,UpdatedBy,SeqNo,Name,AD_ZoomCondition_UU,ZoomLogic,EntityType) VALUES (0,0,199,111,200012,TO_TIMESTAMP('2024-09-14 16:58:46','YYYY-MM-DD HH24:MI:SS'),100,'Y',TO_TIMESTAMP('2024-09-14 16:58:46','YYYY-MM-DD HH24:MI:SS'),100,10,'Zoom to role on tenants','91ce33c0-fb91-4c9e-894e-8e8f49d7677f','@#AD_Client_ID@>0','D')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6007
|
||||
SELECT register_migration_script('202409141807_IDEMPIERE-6007.sql') FROM dual;
|
||||
|
||||
-- Sep 14, 2024, 6:07:20 PM CEST
|
||||
UPDATE AD_Field SET ReadOnlyLogic='@SQL=SELECT 1 FROM AD_Field WHERE AD_Tab_ID=@AD_Tab_ID:0@',Updated=TO_TIMESTAMP('2024-09-14 18:07:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=131
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6248
|
||||
SELECT register_migration_script('202409231820_IDEMPIERE-6248.sql') FROM dual;
|
||||
|
||||
-- Sep 23, 2024, 6:20:30 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200250,0,0,TO_TIMESTAMP('2024-09-23 18:20:29','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-23 18:20:29','YYYY-MM-DD HH24:MI:SS'),10,10,'Y','FULL_EXCEPTION_TRACE_IN_LOG','N','If set to Y, the stack trace is not cut in the log (see https://idempiere.atlassian.net/browse/IDEMPIERE-6248)','D','S','8308ac18-d0a6-479f-ab59-7edd0bcb0b54')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
-- IDEMPIERE-6248
|
||||
SELECT register_migration_script('202409231821_IDEMPIERE-6248_DelSysConfig.sql') FROM dual;
|
||||
|
||||
DELETE FROM AD_SysConfig WHERE AD_SysConfig_ID = 200250
|
||||
;
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
-- IDEMPIERE-5760 Manage mail.smtp.timeout using SysConfig
|
||||
SELECT register_migration_script('202409241248_IDEMPIERE-5760.sql') FROM dual;
|
||||
|
||||
-- Sep 24, 2024, 12:48:56 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200253,0,0,TO_TIMESTAMP('2024-09-24 12:48:55','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-24 12:48:55','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','MAIL_SMTP_CONNECTIONTIMEOUT','-1','Timeout in milliseconds to wait for SMTP connection, -1 leaves the java default','D','C','36be68b7-7b4b-4725-9a51-aeb11bb7b699')
|
||||
;
|
||||
|
||||
-- Sep 24, 2024, 12:49:10 PM CEST
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200254,0,0,TO_TIMESTAMP('2024-09-24 12:49:09','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2024-09-24 12:49:09','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','MAIL_SMTP_WRITETIMEOUT','-1','Timeout in milliseconds to wait for writing on SMTP connection, -1 leaves the java default','D','C','e11d83c4-8500-400a-b9d2-358c30c910fb')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
-- IDEMPIERE-6196_SysConfig
|
||||
SELECT register_migration_script('202410071412_IDEMPIERE-6196.sql') FROM dual;
|
||||
|
||||
-- Oct 7, 2024, 2:12:19 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=10,Updated=TO_TIMESTAMP('2024-10-07 14:12:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50195
|
||||
;
|
||||
|
||||
-- Oct 7, 2024, 2:12:23 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=20,Updated=TO_TIMESTAMP('2024-10-07 14:12:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50197
|
||||
;
|
||||
|
||||
-- Oct 7, 2024, 2:12:27 PM CEST
|
||||
UPDATE AD_Column SET SeqNoSelection=30,Updated=TO_TIMESTAMP('2024-10-07 14:12:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=10 WHERE AD_Column_ID=50196
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
-- IDEMPIERE-6317
|
||||
SELECT register_migration_script('202411260821_IDEMPIERE-6317.sql') FROM dual;
|
||||
|
||||
-- Nov 26, 2024, 8:34:46 AM BRT
|
||||
UPDATE AD_Message SET Value='Can''t Save Tenant Level',Updated=TO_TIMESTAMP('2024-11-26 08:34:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=53010
|
||||
;
|
||||
|
||||
-- Nov 26, 2024, 8:36:49 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','This is a system or tenant parameter, you can''t save it as organization parameter',0,0,'Y',TO_TIMESTAMP('2024-11-26 08:36:48','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-11-26 08:36:48','YYYY-MM-DD HH24:MI:SS'),100,200914,'ThisIsSystemOrTenantParameter','D','8980c935-1c23-4d83-8b26-70eb3a749797')
|
||||
;
|
||||
|
||||
-- Nov 26, 2024, 8:38:56 AM BRT
|
||||
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','This is a system parameter, you can''t save it as tenant parameter',0,0,'Y',TO_TIMESTAMP('2024-11-26 08:38:55','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-11-26 08:38:55','YYYY-MM-DD HH24:MI:SS'),100,200915,'ThisIsSystemParameter','D','6e6b2060-ec2d-4d87-b499-7250e93f7cec')
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,576 @@
|
|||
-- IDEMPIERE-6329 Bug in BOM* SQL functions not getting the correct BOM children
|
||||
SELECT register_migration_script('202411301155_IDEMPIERE-6329.sql') FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelimit (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelist (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricestd (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQtyOnHandForReservation (in product_id numeric, in warehouse_id numeric, in locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
myWarehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN v_Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get v_ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := BOMQtyOnHandForReservation (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQtyOnHand (in product_id numeric, in warehouse_id numeric, in locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
myWarehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN v_Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get v_ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := Bomqtyonhand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bomqtyordered (in p_product_id numeric, in p_warehouse_id numeric, in p_locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Warehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision );
|
||||
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := Bomqtyordered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision );
|
||||
END IF;
|
||||
--
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bomqtyreserved (in p_product_id numeric, in p_warehouse_id numeric, in p_locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Warehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_Product_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND p.IsBOM='Y'
|
||||
AND p.IsVerified='Y'
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
||||
AND M_Warehouse_ID =v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
-- Get Rounding Precision
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=bom.M_ProductBOM_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := ROUND (v_ProductQty/bom.BOMQty, v_StdPrecision);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y') THEN
|
||||
v_ProductQty := Bomqtyreserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN ROUND (v_Quantity, v_StdPrecision);
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
-- IDEMPIERE-6327 Interest Area Window: Subscription tab should not enable "Insert Record"
|
||||
SELECT register_migration_script('202412021125_IDEMPIERE-6327.sql') FROM dual;
|
||||
|
||||
-- Dec 2, 2024, 11:25:16 AM MYT
|
||||
UPDATE AD_Tab SET IsInsertRecord='N',Updated=TO_TIMESTAMP('2024-12-02 11:25:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=536
|
||||
;
|
||||
|
||||
-- Dec 2, 2024, 11:25:32 AM MYT
|
||||
UPDATE AD_Field SET IsReadOnly='Y',Updated=TO_TIMESTAMP('2024-12-02 11:25:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=7625
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
--
|
||||
SELECT register_migration_script('202412041755_IDEMPIERE-6334.sql') FROM dual;
|
||||
|
||||
-- Dec 4, 2024, 5:55:11 PM CET
|
||||
UPDATE AD_Tab SET IsAdvancedTab='Y',Updated=TO_TIMESTAMP('2024-12-04 17:55:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200329
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,548 @@
|
|||
-- IDEMPIERE-6329 Bug in BOM* SQL functions not getting the correct BOM children
|
||||
SELECT register_migration_script('202412091327_IDEMPIERE-6329.sql') FROM dual;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelimit (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE (SUM(PriceLimit), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricelist (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from pricelist directly
|
||||
SELECT COALESCE (SUM(PriceList), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bompricestd (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Price NUMERIC;
|
||||
v_ProductPrice NUMERIC;
|
||||
bom RECORD;
|
||||
|
||||
BEGIN
|
||||
-- Try to get price from PriceList directly
|
||||
SELECT COALESCE(SUM(PriceStd), 0)
|
||||
INTO v_Price
|
||||
FROM M_ProductPrice
|
||||
WHERE IsActive='Y' AND M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
|
||||
|
||||
-- No Price - Check if BOM
|
||||
IF (v_Price = 0) THEN
|
||||
FOR bom IN
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
|
||||
FROM M_Product_BOM b, M_Product p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=Product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND (p.IsBOM='N' OR p.IsVerified='Y')
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
|
||||
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
|
||||
END LOOP;
|
||||
END IF;
|
||||
--
|
||||
RETURN v_Price;
|
||||
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQtyOnHandForReservation (in product_id numeric, in warehouse_id numeric, in locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
myWarehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN v_Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get v_ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
LEFT JOIN M_LocatorType lt ON (l.M_LocatorType_ID=lt.M_LocatorType_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID
|
||||
AND COALESCE(lt.IsAvailableForReservation,'Y')='Y';
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y' AND bom.IsVerified = 'Y') THEN
|
||||
v_ProductQty := BOMQtyOnHandForReservation (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION BOMQtyOnHand (in product_id numeric, in warehouse_id numeric, in locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
myWarehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
myWarehouse_ID := Warehouse_ID;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
IF (Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT SUM(M_Warehouse_ID) INTO myWarehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (myWarehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
-- Unlimited capacity if no item
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN v_Quantity;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=Product_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go through BOM
|
||||
FOR bom IN -- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=product_ID
|
||||
AND b.M_ProductBOM_ID != Product_ID
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get v_ProductQty
|
||||
SELECT COALESCE(SUM(QtyOnHand), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_Storageonhand s
|
||||
JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
|
||||
WHERE s.M_Product_ID=bom.M_ProductBOM_ID AND l.M_Warehouse_ID=myWarehouse_ID;
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyonhand (bom.M_ProductBOM_ID, myWarehouse_ID, Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=Product_ID;
|
||||
--
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bomqtyordered (in p_product_id numeric, in p_warehouse_id numeric, in p_locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Warehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='N'
|
||||
AND IsActive='Y';
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyordered (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
--
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
CREATE OR REPLACE FUNCTION bomqtyreserved (in p_product_id numeric, in p_warehouse_id numeric, in p_locator_id numeric) RETURNS numeric AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
v_Warehouse_ID numeric;
|
||||
v_Quantity numeric := 99999; -- unlimited
|
||||
v_IsBOM CHAR(1);
|
||||
v_IsStocked CHAR(1);
|
||||
v_ProductType CHAR(1);
|
||||
v_ProductQty numeric;
|
||||
v_StdPrecision int;
|
||||
bom record;
|
||||
BEGIN
|
||||
-- Check Parameters
|
||||
v_Warehouse_ID := p_Warehouse_ID;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
IF (p_Locator_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
ELSE
|
||||
SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID
|
||||
FROM M_LOCATOR
|
||||
WHERE M_Locator_ID=p_Locator_ID;
|
||||
END IF;
|
||||
END IF;
|
||||
IF (v_Warehouse_ID IS NULL) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
-- Check, if product exists and if it is stocked
|
||||
BEGIN
|
||||
SELECT IsBOM, ProductType, IsStocked
|
||||
INTO v_IsBOM, v_ProductType, v_IsStocked
|
||||
FROM M_PRODUCT
|
||||
WHERE M_Product_ID=p_Product_ID;
|
||||
--
|
||||
EXCEPTION -- not found
|
||||
WHEN OTHERS THEN
|
||||
RETURN 0;
|
||||
END;
|
||||
|
||||
-- No reservation for non-stocked
|
||||
IF (v_IsBOM='N' AND (v_ProductType<>'I' OR v_IsStocked='N')) THEN
|
||||
RETURN 0;
|
||||
-- Stocked item
|
||||
ELSIF (v_IsStocked='Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=p_Product_ID
|
||||
AND M_Warehouse_ID=v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
--
|
||||
RETURN v_ProductQty;
|
||||
END IF;
|
||||
|
||||
-- Go though BOM
|
||||
FOR bom IN
|
||||
-- Get BOM Product info
|
||||
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType, p.IsVerified
|
||||
FROM M_PRODUCT_BOM b, M_PRODUCT p
|
||||
WHERE b.M_ProductBOM_ID=p.M_Product_ID
|
||||
AND b.M_Product_ID=p_Product_ID
|
||||
AND b.M_ProductBOM_ID != p_Product_ID
|
||||
AND b.IsActive='Y'
|
||||
LOOP
|
||||
-- Stocked Items "leaf node"
|
||||
IF (bom.ProductType = 'I' AND bom.IsStocked = 'Y') THEN
|
||||
-- Get ProductQty
|
||||
SELECT COALESCE(SUM(Qty), 0)
|
||||
INTO v_ProductQty
|
||||
FROM M_StorageReservation
|
||||
WHERE M_Product_ID=bom.M_ProductBOM_ID
|
||||
AND M_Warehouse_ID =v_Warehouse_ID
|
||||
AND IsSOTrx='Y'
|
||||
AND IsActive='Y';
|
||||
-- How much can we make with this product
|
||||
v_ProductQty := v_ProductQty/bom.BOMQty;
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
-- Another BOM
|
||||
ELSIF (bom.IsBOM = 'Y' AND BOM.IsVerified = 'Y') THEN
|
||||
v_ProductQty := Bomqtyreserved (bom.M_ProductBOM_ID, v_Warehouse_ID, p_Locator_ID);
|
||||
-- How much can we make overall
|
||||
IF (v_ProductQty < v_Quantity) THEN
|
||||
v_Quantity := v_ProductQty;
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP; -- BOM
|
||||
|
||||
-- Unlimited (e.g. only services)
|
||||
IF (v_Quantity = 99999) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
|
||||
IF (v_Quantity > 0) THEN
|
||||
-- Get Rounding Precision for Product
|
||||
SELECT COALESCE(MAX(u.StdPrecision), 0)
|
||||
INTO v_StdPrecision
|
||||
FROM C_UOM u, M_PRODUCT p
|
||||
WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID;
|
||||
--
|
||||
RETURN TRUNC(v_Quantity, v_StdPrecision); -- RoundDown
|
||||
END IF;
|
||||
RETURN 0;
|
||||
END;
|
||||
$BODY$
|
||||
LANGUAGE 'plpgsql' STABLE
|
||||
;
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-6335
|
||||
SELECT register_migration_script('202412101102_IDEMPIERE-6335.sql') FROM dual;
|
||||
|
||||
-- Dec 10, 2024, 11:06:45 AM BRT
|
||||
INSERT INTO AD_Process_Para (AD_Process_Para_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,Name,Description,Help,AD_Process_ID,SeqNo,AD_Reference_ID,IsRange,AD_Val_Rule_ID,FieldLength,IsMandatory,ColumnName,IsCentrallyMaintained,EntityType,AD_Element_ID,AD_Process_Para_UU,IsEncrypted,IsAutocomplete,DateRangeOption,IsShowNegateButton) VALUES (200484,0,0,'Y',TO_TIMESTAMP('2024-12-10 11:06:44','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2024-12-10 11:06:44','YYYY-MM-DD HH24:MI:SS'),100,'Document Type','Document type or rules','The Document Type determines document sequence and processing rules',142,20,19,'N',52054,0,'N','C_DocType_ID','Y','D',196,'2b9ac743-0893-474a-aa96-c1eafe8fba86','N','N','D','N')
|
||||
;
|
||||
|
||||
|
|
@ -32,12 +32,14 @@ BEGIN
|
|||
ins :=
|
||||
'INSERT INTO '
|
||||
|| t.tablename
|
||||
|| '_TRL ('
|
||||
|| '_Trl ('
|
||||
|| 'ad_language,ad_client_id,ad_org_id,created,createdby,updated,updatedby,isactive,istranslated,'
|
||||
|| t.tablename
|
||||
|| '_Trl_UU,'
|
||||
|| t.tablename
|
||||
|| suffix;
|
||||
sel :=
|
||||
'SELECT l.ad_language,t.ad_client_id,t.ad_org_id,t.created,t.createdby,t.updated,t.updatedby,t.isactive,''N'' as istranslated,'
|
||||
'SELECT l.ad_language,t.ad_client_id,t.ad_org_id,SYSDATE,10,SYSDATE,10,t.isactive,''N'' as istranslated,generate_uuid(),'
|
||||
|| t.tablename
|
||||
|| suffix;
|
||||
|
||||
|
|
@ -65,7 +67,7 @@ BEGIN
|
|||
|| t.tablename
|
||||
|| ' t, ad_language l WHERE l.issystemlanguage=''Y'' AND NOT EXISTS (SELECT 1 FROM '
|
||||
|| t.tablename
|
||||
|| '_TRL b WHERE b.'
|
||||
|| '_Trl b WHERE b.'
|
||||
|| t.tablename
|
||||
|| suffix || '=t.'
|
||||
|| t.tablename
|
||||
|
|
|
|||
|
|
@ -28,12 +28,14 @@ BEGIN
|
|||
ins :=
|
||||
'INSERT INTO '
|
||||
|| t.tablename
|
||||
|| '_TRL ('
|
||||
|| '_Trl ('
|
||||
|| 'ad_language,ad_client_id,ad_org_id,created,createdby,updated,updatedby,isactive,istranslated,'
|
||||
|| t.tablename
|
||||
|| '_Trl_UU,'
|
||||
|| t.tablename
|
||||
|| suffix;
|
||||
sel :=
|
||||
'SELECT l.ad_language,t.ad_client_id,t.ad_org_id,t.created,t.createdby,t.updated,t.updatedby,t.isactive,''N'' as istranslated,'
|
||||
'SELECT l.ad_language,t.ad_client_id,t.ad_org_id,statement_timestamp(),10,statement_timestamp(),10,t.isactive,''N'' as istranslated,generate_uuid(),'
|
||||
|| t.tablename
|
||||
|| suffix;
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -273,6 +273,10 @@
|
|||
id="org.apache.commons.commons-compress"
|
||||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="org.apache.commons.commons-io"
|
||||
version="0.0.0"/>
|
||||
|
||||
<plugin
|
||||
id="org.apache.commons.commons-net"
|
||||
version="0.0.0"/>
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
</listAttribute>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JAVA_COMMAND" value="java"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||
|
|
@ -60,6 +62,7 @@
|
|||
<setEntry value="org.apache.commons.commons-codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-io@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-net@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@
|
|||
<setEntry value="org.apache.commons.commons-codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-io@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-net@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
<setEntry value="org.apache.commons.commons-codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-io@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-net@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
<setEntry value="org.apache.commons.commons-codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-io@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-net@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@
|
|||
<setEntry value="org.apache.commons.commons-codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-io@default:default"/>
|
||||
<setEntry value="org.apache.commons.commons-net@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -0,0 +1,59 @@
|
|||
/***********************************************************************
|
||||
* This file is part of iDempiere ERP Open Source *
|
||||
* http://www.idempiere.org *
|
||||
* *
|
||||
* Copyright (C) Contributors *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License *
|
||||
* as published by the Free Software Foundation; either version 2 *
|
||||
* of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the Free Software *
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
|
||||
* MA 02110-1301, USA. *
|
||||
* *
|
||||
* Contributors: *
|
||||
* - Nicolas Micoud (TGI) *
|
||||
**********************************************************************/
|
||||
package org.adempiere.base.callout;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.adempiere.base.IColumnCallout;
|
||||
import org.adempiere.base.annotation.Callout;
|
||||
import org.compiere.model.GridField;
|
||||
import org.compiere.model.GridTab;
|
||||
import org.compiere.model.MTable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Nicolas Micoud (TGI)
|
||||
*
|
||||
*/
|
||||
@Callout(tableName = "AD_Package_Exp_Detail", columnName = {"SQLStatement"})
|
||||
public class PackageExpDetail implements IColumnCallout {
|
||||
@Override
|
||||
public String start(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value, Object oldValue) {
|
||||
|
||||
if (value != null && mTab.getValue("AD_Table_ID") == null) {
|
||||
String sql = value.toString();
|
||||
if (sql.startsWith("SELECT ") && sql.contains(" FROM ")) {
|
||||
int start = sql.indexOf(" FROM ") + 6;
|
||||
int end = sql.indexOf(" ", start + 1);
|
||||
|
||||
String tablename = sql.substring(start, end);
|
||||
|
||||
if (MTable.get(ctx, tablename) != null)
|
||||
mTab.setValue("AD_Table_ID", MTable.get(ctx, tablename).getAD_Table_ID());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -156,6 +156,11 @@ public class CalloutRMA extends CalloutEngine {
|
|||
MInvoice invoice = rma.getOriginalInvoice();
|
||||
if (invoice != null)
|
||||
{
|
||||
int dropshipLocationId = -1;
|
||||
MOrder order = invoice.getOriginalOrder();
|
||||
if (order != null)
|
||||
dropshipLocationId = order.getDropShip_Location_ID();
|
||||
|
||||
pp.setM_PriceList_ID(invoice.getM_PriceList_ID());
|
||||
pp.setPriceDate(invoice.getDateInvoiced());
|
||||
|
||||
|
|
@ -168,7 +173,7 @@ public class CalloutRMA extends CalloutEngine {
|
|||
invoice.getDateInvoiced(), invoice.getDateInvoiced(),
|
||||
AD_Org_ID, rma.getShipment().getM_Warehouse_ID(),
|
||||
invoice.getC_BPartner_Location_ID(), // should be bill to
|
||||
invoice.getC_BPartner_Location_ID(), rma.isSOTrx(), deliveryViaRule, null);
|
||||
invoice.getC_BPartner_Location_ID(), dropshipLocationId, rma.isSOTrx(), deliveryViaRule, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -183,7 +188,7 @@ public class CalloutRMA extends CalloutEngine {
|
|||
order.getDateOrdered(), order.getDateOrdered(),
|
||||
AD_Org_ID, order.getM_Warehouse_ID(),
|
||||
order.getC_BPartner_Location_ID(), // should be bill to
|
||||
order.getC_BPartner_Location_ID(), rma.isSOTrx(), order.getDeliveryViaRule(), null);
|
||||
order.getC_BPartner_Location_ID(), order.getDropShip_Location_ID(), rma.isSOTrx(), order.getDeliveryViaRule(), null);
|
||||
}
|
||||
else
|
||||
return "No Invoice/Order found the Shipment/Receipt associated";
|
||||
|
|
|
|||
|
|
@ -525,7 +525,7 @@ public class CalloutInOut extends CalloutEngine
|
|||
mTab.setValue("M_Locator_ID", Integer.valueOf(M_Locator_ID));
|
||||
}
|
||||
else
|
||||
mTab.setValue("M_AttributeSetInstance_ID", null);
|
||||
mTab.setValue("M_AttributeSetInstance_ID", 0);
|
||||
//
|
||||
int M_Warehouse_ID = Env.getContextAsInt(ctx, WindowNo, "M_Warehouse_ID");
|
||||
boolean IsSOTrx = "Y".equals(Env.getContext(ctx, WindowNo, "IsSOTrx"));
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class CalloutInventory extends CalloutEngine
|
|||
|
||||
if ("M_Product_ID".equals(mField.getColumnName())) {
|
||||
// product changed - remove old ASI
|
||||
mTab.setValue("M_AttributeSetInstance_ID", null);
|
||||
mTab.setValue("M_AttributeSetInstance_ID", 0);
|
||||
}
|
||||
|
||||
// Get Book Value
|
||||
|
|
@ -96,7 +96,7 @@ public class CalloutInventory extends CalloutEngine
|
|||
if (M_AttributeSetInstance_ID != 0)
|
||||
mTab.setValue(MInventoryLine.COLUMNNAME_M_AttributeSetInstance_ID, M_AttributeSetInstance_ID);
|
||||
else
|
||||
mTab.setValue(MInventoryLine.COLUMNNAME_M_AttributeSetInstance_ID, null);
|
||||
mTab.setValue(MInventoryLine.COLUMNNAME_M_AttributeSetInstance_ID, 0);
|
||||
}
|
||||
|
||||
// Set QtyBook from first storage location
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ public class CalloutInvoice extends CalloutEngine
|
|||
&& Env.getContextAsInt(ctx, WindowNo, Env.TAB_INFO, "M_AttributeSetInstance_ID") != 0)
|
||||
mTab.setValue("M_AttributeSetInstance_ID", Env.getContextAsInt(ctx, WindowNo, Env.TAB_INFO, "M_AttributeSetInstance_ID"));
|
||||
else
|
||||
mTab.setValue("M_AttributeSetInstance_ID", null);
|
||||
mTab.setValue("M_AttributeSetInstance_ID", 0);
|
||||
|
||||
/***** Price Calculation see also qty ****/
|
||||
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
|
||||
|
|
@ -488,8 +488,9 @@ public class CalloutInvoice extends CalloutEngine
|
|||
|
||||
//
|
||||
String deliveryViaRule = getLineDeliveryViaRule(ctx, WindowNo, mTab);
|
||||
int dropshipLocationId = getDropShipLocationId(ctx, WindowNo, mTab);
|
||||
int C_Tax_ID = Core.getTaxLookup().get(ctx, M_Product_ID, C_Charge_ID, billDate, shipDate,
|
||||
AD_Org_ID, M_Warehouse_ID, billC_BPartner_Location_ID, shipC_BPartner_Location_ID,
|
||||
AD_Org_ID, M_Warehouse_ID, billC_BPartner_Location_ID, shipC_BPartner_Location_ID, dropshipLocationId,
|
||||
Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y"), deliveryViaRule, null);
|
||||
if (log.isLoggable(Level.INFO)) log.info("Tax ID=" + C_Tax_ID);
|
||||
//
|
||||
|
|
@ -501,6 +502,13 @@ public class CalloutInvoice extends CalloutEngine
|
|||
return amt (ctx, WindowNo, mTab, mField, value);
|
||||
} // tax
|
||||
|
||||
/**
|
||||
* Get the delivery via rule from the related order
|
||||
* @param ctx
|
||||
* @param windowNo
|
||||
* @param mTab
|
||||
* @return
|
||||
*/
|
||||
private String getLineDeliveryViaRule(Properties ctx, int windowNo, GridTab mTab) {
|
||||
if (mTab.getValue("C_OrderLine_ID") != null) {
|
||||
int C_OrderLine_ID = (Integer) mTab.getValue("C_OrderLine_ID");
|
||||
|
|
@ -524,6 +532,29 @@ public class CalloutInvoice extends CalloutEngine
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the drop shipment location ID from the related order
|
||||
* @param ctx
|
||||
* @param windowNo
|
||||
* @param mTab
|
||||
* @return
|
||||
*/
|
||||
private int getDropShipLocationId(Properties ctx, int windowNo, GridTab mTab) {
|
||||
if (mTab.getValue("C_OrderLine_ID") != null) {
|
||||
int C_OrderLine_ID = (Integer) mTab.getValue("C_OrderLine_ID");
|
||||
if (C_OrderLine_ID > 0) {
|
||||
MOrderLine orderLine = new MOrderLine(ctx, C_OrderLine_ID, null);
|
||||
return orderLine.getParent().getDropShip_Location_ID();
|
||||
}
|
||||
}
|
||||
int C_Order_ID = Env.getContextAsInt(ctx, windowNo, "C_Order_ID", true);
|
||||
if (C_Order_ID > 0) {
|
||||
MOrder order = new MOrder(ctx, C_Order_ID, null);
|
||||
return order.getDropShip_Location_ID();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoice - Amount.
|
||||
* - called from QtyInvoiced, PriceActual
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue