annul
This commit is contained in:
commit
a8f6b93cbd
|
|
@ -1,4 +1,3 @@
|
||||||
# Author: Ahmad Samir <a.atta@exp-sa.com>
|
|
||||||
name: Block Reserved Branches
|
name: Block Reserved Branches
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|
@ -9,20 +8,63 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
block-reserved-branches:
|
block-reserved-branches:
|
||||||
runs-on: app-sever-project-runner
|
runs-on: app-sever-project-runner
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check for reserved or pattern-matching branch names
|
- name: Validate branch creator + reserved names
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
REPO: ${{ github.repository }}
|
REPO: ${{ github.repository }}
|
||||||
BRANCH_NAME: ${{ github.ref_name }}
|
BRANCH_NAME: ${{ github.ref_name }}
|
||||||
|
CREATOR: ${{ github.actor }}
|
||||||
run: |
|
run: |
|
||||||
|
echo "Branch: $BRANCH_NAME"
|
||||||
|
echo "Creator: $CREATOR"
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# 🟦 1) Allowed Users List
|
||||||
|
#######################################################
|
||||||
|
ALLOWED_USERS=(
|
||||||
|
"expsa"
|
||||||
|
"moutazmuhammad"
|
||||||
|
"ronozoro"
|
||||||
|
"Abubaker-Altaib"
|
||||||
|
"altexp"
|
||||||
|
"the5abir"
|
||||||
|
"ahmadaking"
|
||||||
|
"kchyounes19"
|
||||||
|
"abdurrahman-saber"
|
||||||
|
"maltayyar2"
|
||||||
|
"esam-sermah"
|
||||||
|
"mohammed-alkhazrji"
|
||||||
|
)
|
||||||
|
|
||||||
|
IS_ALLOWED="false"
|
||||||
|
for user in "${ALLOWED_USERS[@]}"; do
|
||||||
|
if [[ "$CREATOR" == "$user" ]]; then
|
||||||
|
IS_ALLOWED="true"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$IS_ALLOWED" == "false" ]]; then
|
||||||
|
echo "❌ User '$CREATOR' is NOT allowed to create branches. Deleting..."
|
||||||
|
curl -s -X DELETE \
|
||||||
|
-H "Authorization: token $GH_TOKEN" \
|
||||||
|
https://api.github.com/repos/$REPO/git/refs/heads/$BRANCH_NAME
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✔ User '$CREATOR' is allowed."
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# 🟦 2) Reserved Branch Names (Your Existing List)
|
||||||
|
#######################################################
|
||||||
RESERVED_NAMES=(
|
RESERVED_NAMES=(
|
||||||
master
|
master
|
||||||
dev_odex25_accounting
|
dev_odex25_accounting
|
||||||
dev_odex25_base
|
dev_odex25_base
|
||||||
dev_odex25_dms
|
dev_odex25_dms
|
||||||
dev_odex25_donation
|
dev_odex25_donation
|
||||||
dev_odex25_ensan
|
|
||||||
dev_odex25_fleet
|
dev_odex25_fleet
|
||||||
dev_odex25_helpdesk
|
dev_odex25_helpdesk
|
||||||
dev_odex25_hr
|
dev_odex25_hr
|
||||||
|
|
@ -39,11 +81,13 @@ jobs:
|
||||||
dev_odex25_website
|
dev_odex25_website
|
||||||
dev_odex-event
|
dev_odex-event
|
||||||
dev_openeducat_erp-14.0.1.0
|
dev_openeducat_erp-14.0.1.0
|
||||||
|
dev_odex25_benefit
|
||||||
|
dev_odex25_takaful
|
||||||
|
dev_odex25_ensan
|
||||||
master_odex25_accounting
|
master_odex25_accounting
|
||||||
master_odex25_base
|
master_odex25_base
|
||||||
master_odex25_dms
|
master_odex25_dms
|
||||||
master_odex25_donation
|
master_odex25_donation
|
||||||
master_odex25_ensan
|
|
||||||
master_odex25_fleet
|
master_odex25_fleet
|
||||||
master_odex25_helpdesk
|
master_odex25_helpdesk
|
||||||
master_odex25_hr
|
master_odex25_hr
|
||||||
|
|
@ -60,11 +104,13 @@ jobs:
|
||||||
master_odex25_website
|
master_odex25_website
|
||||||
master_odex-event
|
master_odex-event
|
||||||
master_openeducat_erp-14.0.1.0
|
master_openeducat_erp-14.0.1.0
|
||||||
|
master_odex25_benefit
|
||||||
|
master_odex25_takaful
|
||||||
|
master_odex25_ensan
|
||||||
preprod_odex25_accounting
|
preprod_odex25_accounting
|
||||||
preprod_odex25_base
|
preprod_odex25_base
|
||||||
preprod_odex25_dms
|
preprod_odex25_dms
|
||||||
preprod_odex25_donation
|
preprod_odex25_donation
|
||||||
preprod_odex25_ensan
|
|
||||||
preprod_odex25_fleet
|
preprod_odex25_fleet
|
||||||
preprod_odex25_helpdesk
|
preprod_odex25_helpdesk
|
||||||
preprod_odex25_hr
|
preprod_odex25_hr
|
||||||
|
|
@ -81,19 +127,31 @@ jobs:
|
||||||
preprod_odex25_website
|
preprod_odex25_website
|
||||||
preprod_odex-event
|
preprod_odex-event
|
||||||
preprod_openeducat_erp-14.0.1.0
|
preprod_openeducat_erp-14.0.1.0
|
||||||
|
preprod_odex25_benefit
|
||||||
|
preprod_odex25_takaful
|
||||||
|
preprod_odex25_ensan
|
||||||
)
|
)
|
||||||
# Check if branch is an exact reserved name
|
|
||||||
|
# Exact match
|
||||||
for reserved in "${RESERVED_NAMES[@]}"; do
|
for reserved in "${RESERVED_NAMES[@]}"; do
|
||||||
if [[ "$BRANCH_NAME" == "$reserved" ]]; then
|
if [[ "$BRANCH_NAME" == "$reserved" ]]; then
|
||||||
echo "❌ Branch name '$BRANCH_NAME' is reserved. Deleting..."
|
echo "❌ Branch name '$BRANCH_NAME' is reserved. Deleting..."
|
||||||
curl -s -X DELETE -H "Authorization: token $GH_TOKEN" https://api.github.com/repos/$REPO/git/refs/heads/$BRANCH_NAME
|
curl -s -X DELETE \
|
||||||
|
-H "Authorization: token $GH_TOKEN" \
|
||||||
|
https://api.github.com/repos/$REPO/git/refs/heads/$BRANCH_NAME
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
# Check if branch name matches restricted patterns
|
|
||||||
|
#######################################################
|
||||||
|
# 🟦 3) Pattern-based Restriction
|
||||||
|
#######################################################
|
||||||
if [[ "$BRANCH_NAME" == master_* || "$BRANCH_NAME" == preprod_* || "$BRANCH_NAME" == dev_* ]]; then
|
if [[ "$BRANCH_NAME" == master_* || "$BRANCH_NAME" == preprod_* || "$BRANCH_NAME" == dev_* ]]; then
|
||||||
echo "❌ Branch name '$BRANCH_NAME' matches restricted pattern. Deleting..."
|
echo "❌ Branch name '$BRANCH_NAME' matches restricted pattern. Deleting..."
|
||||||
curl -s -X DELETE -H "Authorization: token $GH_TOKEN" https://api.github.com/repos/$REPO/git/refs/heads/$BRANCH_NAME
|
curl -s -X DELETE \
|
||||||
|
-H "Authorization: token $GH_TOKEN" \
|
||||||
|
https://api.github.com/repos/$REPO/git/refs/heads/$BRANCH_NAME
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✅ Branch '$BRANCH_NAME' is allowed."
|
|
||||||
|
echo "✅ Branch '$BRANCH_NAME' is allowed."
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,10 @@ on:
|
||||||
- dev_odex25_transactions
|
- dev_odex25_transactions
|
||||||
- dev_odex25_website
|
- dev_odex25_website
|
||||||
- dev_openeducat_erp-14.0.1.0
|
- dev_openeducat_erp-14.0.1.0
|
||||||
- dev_odex25_ensan
|
|
||||||
- dev_odex25_donation
|
- dev_odex25_donation
|
||||||
|
- dev_odex25_benefit
|
||||||
|
- dev_odex25_takaful
|
||||||
|
- dev_odex25_ensan
|
||||||
- preprod_odex-event
|
- preprod_odex-event
|
||||||
- preprod_odex25_accounting
|
- preprod_odex25_accounting
|
||||||
- preprod_odex25_base
|
- preprod_odex25_base
|
||||||
|
|
@ -43,9 +45,11 @@ on:
|
||||||
- preprod_odex25_transactions
|
- preprod_odex25_transactions
|
||||||
- preprod_odex25_website
|
- preprod_odex25_website
|
||||||
- preprod_openeducat_erp-14.0.1.0
|
- preprod_openeducat_erp-14.0.1.0
|
||||||
- preprod_odex25_ensan
|
|
||||||
- preprod_odex25_donation
|
- preprod_odex25_donation
|
||||||
|
- preprod_odex25_benefit
|
||||||
|
- preprod_odex25_takaful
|
||||||
|
- preprod_odex25_ensan
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
environment:
|
environment:
|
||||||
|
|
@ -82,7 +86,8 @@ jobs:
|
||||||
github.ref == 'refs/heads/preprod_odex25_transactions' ||
|
github.ref == 'refs/heads/preprod_odex25_transactions' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_website' ||
|
github.ref == 'refs/heads/preprod_odex25_website' ||
|
||||||
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
|
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_ensan' ||
|
github.ref == 'refs/heads/preprod_odex25_benefit' ||
|
||||||
|
github.ref == 'refs/heads/preprod_odex25_takaful' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_donation')
|
github.ref == 'refs/heads/preprod_odex25_donation')
|
||||||
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
|
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -120,7 +125,8 @@ jobs:
|
||||||
github.ref == 'refs/heads/dev_odex25_transactions' ||
|
github.ref == 'refs/heads/dev_odex25_transactions' ||
|
||||||
github.ref == 'refs/heads/dev_odex25_website' ||
|
github.ref == 'refs/heads/dev_odex25_website' ||
|
||||||
github.ref == 'refs/heads/dev_openeducat_erp-14.0.1.0' ||
|
github.ref == 'refs/heads/dev_openeducat_erp-14.0.1.0' ||
|
||||||
github.ref == 'refs/heads/dev_odex25_ensan' ||
|
github.ref == 'refs/heads/dev_odex25_benefit' ||
|
||||||
|
github.ref == 'refs/heads/dev_odex25_takaful' ||
|
||||||
github.ref == 'refs/heads/dev_odex25_donation')
|
github.ref == 'refs/heads/dev_odex25_donation')
|
||||||
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'dev')
|
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'dev')
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -158,7 +164,8 @@ jobs:
|
||||||
github.ref == 'refs/heads/preprod_odex25_transactions' ||
|
github.ref == 'refs/heads/preprod_odex25_transactions' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_website' ||
|
github.ref == 'refs/heads/preprod_odex25_website' ||
|
||||||
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
|
github.ref == 'refs/heads/preprod_openeducat_erp-14.0.1.0' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_ensan' ||
|
github.ref == 'refs/heads/preprod_odex25_benefit' ||
|
||||||
|
github.ref == 'refs/heads/preprod_odex25_takaful' ||
|
||||||
github.ref == 'refs/heads/preprod_odex25_donation')
|
github.ref == 'refs/heads/preprod_odex25_donation')
|
||||||
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
|
|| (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'preprod')
|
||||||
steps:
|
steps:
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ on:
|
||||||
- dev_odex25_ensan
|
- dev_odex25_ensan
|
||||||
- dev_odex25_helpdesk
|
- dev_odex25_helpdesk
|
||||||
- dev_odex25_donation
|
- dev_odex25_donation
|
||||||
|
- dev_odex25_benefit
|
||||||
|
- dev_odex25_takaful
|
||||||
|
|
||||||
- preprod_odex-event
|
- preprod_odex-event
|
||||||
- preprod_odex25_accounting
|
- preprod_odex25_accounting
|
||||||
|
|
@ -47,6 +49,8 @@ on:
|
||||||
- preprod_odex25_ensan
|
- preprod_odex25_ensan
|
||||||
- preprod_odex25_helpdesk
|
- preprod_odex25_helpdesk
|
||||||
- preprod_odex25_donation
|
- preprod_odex25_donation
|
||||||
|
- preprod_odex25_benefit
|
||||||
|
- preprod_odex25_takaful
|
||||||
|
|
||||||
- master_odex-event
|
- master_odex-event
|
||||||
- master_odex25_accounting
|
- master_odex25_accounting
|
||||||
|
|
@ -69,7 +73,8 @@ on:
|
||||||
- master_odex25_ensan
|
- master_odex25_ensan
|
||||||
- master_odex25_helpdesk
|
- master_odex25_helpdesk
|
||||||
- master_odex25_donation
|
- master_odex25_donation
|
||||||
|
- master_odex25_benefit
|
||||||
|
- master_odex25_takaful
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
@ -188,6 +193,17 @@ jobs:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "${{ github.base_ref }}" == "preprod_odex25_benefit" && "${{ github.head_ref }}" != "dev_odex25_benefit" ]]; then
|
||||||
|
echo "::error ::You can only merge to 'preprod_odex25_donation' from 'dev_odex25_donation' branch!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${{ github.base_ref }}" == "preprod_odex25_takaful" && "${{ github.head_ref }}" != "dev_odex25_takaful" ]]; then
|
||||||
|
echo "::error ::You can only merge to 'preprod_odex25_donation' from 'dev_odex25_donation' branch!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# ✅ Master Branches
|
# ✅ Master Branches
|
||||||
if [[ "${{ github.base_ref }}" == "master_odex-event" && "${{ github.head_ref }}" != "preprod_odex-event" ]]; then
|
if [[ "${{ github.base_ref }}" == "master_odex-event" && "${{ github.head_ref }}" != "preprod_odex-event" ]]; then
|
||||||
echo "::error ::You can only merge to 'master_odex-event' from 'preprod_odex-event' branch!"
|
echo "::error ::You can only merge to 'master_odex-event' from 'preprod_odex-event' branch!"
|
||||||
|
|
@ -294,6 +310,19 @@ jobs:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "${{ github.base_ref }}" == "master_odex25_benefit" && "${{ github.head_ref }}" != "preprod_odex25_benefit" ]]; then
|
||||||
|
echo "::error ::You can only merge to 'master_odex25_donation' from 'preprod_odex25_donation' branch!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${{ github.base_ref }}" == "master_odex25_takaful" && "${{ github.head_ref }}" != "preprod_odex25_takaful" ]]; then
|
||||||
|
echo "::error ::You can only merge to 'master_odex25_donation' from 'preprod_odex25_donation' branch!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ❌ Block ALL merges to 'master'
|
# ❌ Block ALL merges to 'master'
|
||||||
if [[ "${{ github.base_ref }}" == "master" ]]; then
|
if [[ "${{ github.base_ref }}" == "master" ]]; then
|
||||||
|
|
@ -301,4 +330,4 @@ jobs:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Merge validation passed."
|
echo "Merge validation passed."
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
ensan_master_server:
|
ensan_master_server:
|
||||||
name: Deploy to Ensan Master
|
name: Deploy to Ensan Master
|
||||||
runs-on: new-ensan-vpn-client-server-runner
|
runs-on: new-ensan-vpn-client-server-runner
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ensan Project - Production' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan' || github.ref == 'refs/heads/master_odex25_donation') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ensan Project - Production' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_donation' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
@ -50,7 +50,7 @@ jobs:
|
||||||
helpdesk_maser_server:
|
helpdesk_maser_server:
|
||||||
name: Deploy to Helpdesk Master
|
name: Deploy to Helpdesk Master
|
||||||
runs-on: helpdesk_server
|
runs-on: helpdesk_server
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Helpdesk Khabir Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan' || github.ref == 'refs/heads/master_odex25_helpdesk') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Helpdesk Khabir Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
@ -78,7 +78,7 @@ jobs:
|
||||||
kaz_master_server:
|
kaz_master_server:
|
||||||
name: Deploy to KAZ Master
|
name: Deploy to KAZ Master
|
||||||
runs-on: kaz-library-project-runner
|
runs-on: kaz-library-project-runner
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'King AbdelAziz Library Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'King AbdelAziz Library Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
@ -107,7 +107,7 @@ jobs:
|
||||||
twahod_master_server:
|
twahod_master_server:
|
||||||
name: Deploy to Twahod Master
|
name: Deploy to Twahod Master
|
||||||
runs-on: twahod-client-project-runner
|
runs-on: twahod-client-project-runner
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Twahod Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Twahod Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
@ -135,7 +135,7 @@ jobs:
|
||||||
ekram_master_server:
|
ekram_master_server:
|
||||||
name: Deploy to Ekram Master
|
name: Deploy to Ekram Master
|
||||||
runs-on: ekram-client-project-runner
|
runs-on: ekram-client-project-runner
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ekram Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Ekram Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
@ -218,7 +218,7 @@ jobs:
|
||||||
jazala_master_server:
|
jazala_master_server:
|
||||||
name: Deploy to Jazala Master
|
name: Deploy to Jazala Master
|
||||||
runs-on: jazala-client-project-runner
|
runs-on: jazala-client-project-runner
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Jazala Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'Jazala Project' && (github.ref == 'refs/heads/master_odex-event' || github.ref == 'refs/heads/master_odex25_accounting' || github.ref == 'refs/heads/master_odex25_base' || github.ref == 'refs/heads/master_odex25_dms' || github.ref == 'refs/heads/master_odex25_fleet' || github.ref == 'refs/heads/master_odex25_helpdesk' || github.ref == 'refs/heads/master_odex25_ENSAN' || github.ref == 'refs/heads/master_odex25_hr' || github.ref == 'refs/heads/master_odex25_inventory' || github.ref == 'refs/heads/master_odex25_maintenance' || github.ref == 'refs/heads/master_odex25_mobile' || github.ref == 'refs/heads/master_odex25_pos' || github.ref == 'refs/heads/master_odex25_project' || github.ref == 'refs/heads/master_odex25_purchase' || github.ref == 'refs/heads/master_odex25_realstate' || github.ref == 'refs/heads/master_odex25_sales' || github.ref == 'refs/heads/master_odex25_survey' || github.ref == 'refs/heads/master_odex25_transactions' || github.ref == 'refs/heads/master_odex25_website' || github.ref == 'refs/heads/master_openeducat_erp-14.0.1.0' || github.ref == 'refs/heads/master_odex25_takaful' || github.ref == 'refs/heads/master_odex25_benefit' || github.ref == 'refs/heads/master_odex25_ensan') &&
|
||||||
(github.actor == 'moutazmuhammad' ||
|
(github.actor == 'moutazmuhammad' ||
|
||||||
github.actor == 'expsa' ||
|
github.actor == 'expsa' ||
|
||||||
github.actor == 'ahmadaking' ||
|
github.actor == 'ahmadaking' ||
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
name: Restrict PR Authors & Committers
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize]
|
||||||
|
branches:
|
||||||
|
- dev_odex-event
|
||||||
|
- dev_odex25_accounting
|
||||||
|
- dev_odex25_base
|
||||||
|
- dev_odex25_dms
|
||||||
|
- dev_odex25_fleet
|
||||||
|
- dev_odex25_hr
|
||||||
|
- dev_odex25_inventory
|
||||||
|
- dev_odex25_maintenance
|
||||||
|
- dev_odex25_mobile
|
||||||
|
- dev_odex25_pos
|
||||||
|
- dev_odex25_project
|
||||||
|
- dev_odex25_purchase
|
||||||
|
- dev_odex25_realstate
|
||||||
|
- dev_odex25_sales
|
||||||
|
- dev_odex25_survey
|
||||||
|
- dev_odex25_transactions
|
||||||
|
- dev_odex25_website
|
||||||
|
- dev_openeducat_erp-14.0.1.0
|
||||||
|
- dev_odex25_benefit
|
||||||
|
- dev_odex25_takaful
|
||||||
|
- dev_odex25_helpdesk
|
||||||
|
- dev_odex25_donation
|
||||||
|
- dev_odex25_ensan
|
||||||
|
jobs:
|
||||||
|
check_pr_author:
|
||||||
|
runs-on: linting_odex25-standard-modules_runner
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Validate PR Author & Commit Authors
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GH_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const allowed = [
|
||||||
|
"expsa",
|
||||||
|
"moutazmuhammad",
|
||||||
|
"ronozoro",
|
||||||
|
"Abubaker-Altaib",
|
||||||
|
"altexp",
|
||||||
|
"the5abir",
|
||||||
|
"ahmadaking",
|
||||||
|
"kchyounes19",
|
||||||
|
"abdurrahman-saber",
|
||||||
|
"maltayyar2",
|
||||||
|
"esam-sermah",
|
||||||
|
"mohammed-alkhazrji"
|
||||||
|
];
|
||||||
|
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
const prAuthor = pr.user.login;
|
||||||
|
const owner = context.repo.owner;
|
||||||
|
const repo = context.repo.repo;
|
||||||
|
|
||||||
|
core.info(`PR author: ${prAuthor}`);
|
||||||
|
|
||||||
|
// Check PR author
|
||||||
|
if (!allowed.includes(prAuthor)) {
|
||||||
|
core.error(`Unauthorized PR author: ${prAuthor}. Closing PR...`);
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: pr.number,
|
||||||
|
state: "closed"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check commit authors
|
||||||
|
const commitList = await github.rest.pulls.listCommits({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: pr.number
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const commit of commitList.data) {
|
||||||
|
const commitAuthor = commit.author ? commit.author.login : null;
|
||||||
|
|
||||||
|
if (commitAuthor && !allowed.includes(commitAuthor)) {
|
||||||
|
core.error(`Unauthorized commit author: ${commitAuthor}. Closing PR...`);
|
||||||
|
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: pr.number,
|
||||||
|
state: "closed"
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info("All PR authors and committers are allowed.");
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
name: SonarQube Analysis
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master_odex-event
|
|
||||||
- master_odex25_accounting
|
|
||||||
- master_odex25_base
|
|
||||||
- master_odex25_dms
|
|
||||||
- master_odex25_fleet
|
|
||||||
- master_odex25_helpdesk
|
|
||||||
- master_odex25_hr
|
|
||||||
- master_odex25_inventory
|
|
||||||
- master_odex25_maintenance
|
|
||||||
- master_odex25_mobile
|
|
||||||
- master_odex25_pos
|
|
||||||
- master_odex25_project
|
|
||||||
- master_odex25_purchase
|
|
||||||
- master_odex25_realstate
|
|
||||||
- master_odex25_sales
|
|
||||||
- master_odex25_survey
|
|
||||||
- master_odex25_transactions
|
|
||||||
- master_odex25_website
|
|
||||||
- master_openeducat_erp-14.0.1.0
|
|
||||||
- master_odex25_ensan
|
|
||||||
- master_odex25_donation
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
sonar:
|
|
||||||
runs-on: sonarqube
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Run SonarScanner
|
|
||||||
run: |
|
|
||||||
export BRANCH_NAME="${GITHUB_REF#refs/heads/}"
|
|
||||||
export SAFE_BRANCH_NAME="${BRANCH_NAME//\//_}"
|
|
||||||
export PROJECT_KEY="odex25_standard_modules_${SAFE_BRANCH_NAME}"
|
|
||||||
export PROJECT_NAME="Standard Modules ${SAFE_BRANCH_NAME^}"
|
|
||||||
export SOURCE_FOLDER_NAME="${BRANCH_NAME#master_}"
|
|
||||||
export PROJECT_VERSION="1.0"
|
|
||||||
export SONAR_HOST_URL=${{ secrets.SONAR_HOST_URL }}
|
|
||||||
export SONAR_TOKEN=${{ secrets.SONAR_TOKEN }}
|
|
||||||
|
|
||||||
sonar-scanner \
|
|
||||||
-Dsonar.projectKey="$PROJECT_KEY" \
|
|
||||||
-Dsonar.projectName="$PROJECT_NAME" \
|
|
||||||
-Dsonar.projectVersion="$PROJECT_VERSION" \
|
|
||||||
-Dsonar.sources="$SOURCE_FOLDER_NAME" \
|
|
||||||
-Dsonar.inclusions="**/*.py, **/*.xml, **/*.js, **/*.html, **/*.css" \
|
|
||||||
-Dsonar.exclusions="**/__manifest__.py, **/migrations/**, **/__pycache__/**" \
|
|
||||||
-Dsonar.sourceEncoding="UTF-8" \
|
|
||||||
-Dsonar.host.url="$SONAR_HOST_URL" \
|
|
||||||
-Dsonar.login="$SONAR_TOKEN"
|
|
||||||
|
|
||||||
- name: Cleanup workspace
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
rm -rf $GITHUB_WORKSPACE/*
|
|
||||||
|
|
@ -19,12 +19,12 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form>
|
<form>
|
||||||
<header>
|
<header>
|
||||||
<button name="action_send" string="Send" type="object" states="draft" groups="purchase.group_purchase_user"/>
|
<button name="action_send" string="Send" type="object" states="draft" groups="purchase.group_purchase_user" class="btn-primary" icon="fa-send"/>
|
||||||
<button name="action_ssd_approve" string="SSD Approve" type="object" states="ssd" groups="hr_base.group_services_manager"/>
|
<button name="action_ssd_approve" string="SSD Approve" type="object" states="ssd" groups="hr_base.group_services_manager" class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button name="action_ssd_reject" string="SSD Reject" type="object" states="ssd" groups="hr_base.group_services_manager"/>
|
<button name="action_ssd_reject" string="SSD Reject" type="object" states="ssd" groups="hr_base.group_services_manager" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button name="action_gm_approve" string="GM Approve (Add to Agreement)" type="object" states="gm" groups="hr_base.group_general_manager"/>
|
<button name="action_gm_approve" string="GM Approve (Add to Agreement)" type="object" states="gm" groups="hr_base.group_general_manager" class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button name="action_gm_reject" string="GM Reject" type="object" states="gm" groups="hr_base.group_general_manager"/>
|
<button name="action_gm_reject" string="GM Reject" type="object" states="gm" groups="hr_base.group_general_manager" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button name="action_cancel" string="Cancel" type="object" states="draft,ssd,gm"/>
|
<button name="action_cancel" string="Cancel" type="object" states="draft,ssd,gm" class="btn-secondary" icon="fa-ban"/>
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,ssd,gm,approved,rejected,cancel"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,ssd,gm,approved,rejected,cancel"/>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,18 +23,20 @@
|
||||||
<form string="Annual Purchase Request">
|
<form string="Annual Purchase Request">
|
||||||
<header>
|
<header>
|
||||||
<field name="can_create_agreement" invisible="1"/>
|
<field name="can_create_agreement" invisible="1"/>
|
||||||
<button name="action_send" string="Send" type="object" states="draft" class="oe_highlight" groups="purchase.group_purchase_user"/>
|
|
||||||
<button name="action_manager_approve" string="Approve" type="object" class="oe_highlight" states="to_manager" groups="purchase.group_purchase_manager"/>
|
<button name="action_send" string="Send" type="object" states="draft" class="btn-primary" groups="purchase.group_purchase_user" icon="fa-send"/>
|
||||||
<button name="action_manager_reject" string="Reject" type="object" states="to_manager" groups="purchase.group_purchase_manager"/>
|
<button name="action_manager_approve" string="Approve" type="object" class="btn-primary" states="to_manager" groups="purchase.group_purchase_manager" icon="fa-check-circle"/>
|
||||||
<button name="action_send_to_committee" string="Send to Committee" type="object" class="oe_highlight" groups="purchase.group_purchase_user" attrs="{'invisible': ['|', ('committee_enabled','=',False), ('state','not in',['procurement','rejected_by_committee'])]}"/>
|
<button name="action_manager_reject" string="Reject" type="object" states="to_manager" groups="purchase.group_purchase_manager" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button name="action_create_rfq" string="Create RFQ" type="object" class="oe_highlight" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user"/>
|
<button name="action_send_to_committee" string="Send to Committee" type="object" class="btn-info" groups="purchase.group_purchase_user" attrs="{'invisible': ['|', ('committee_enabled','=',False), ('state','not in',['procurement','rejected_by_committee'])]}" icon="fa-users"/>
|
||||||
<button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee,committee" groups="purchase.group_purchase_user"/>
|
<button name="action_create_rfq" string="Create RFQ" type="object" class="btn-primary" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user" icon="fa-file-text-o"/>
|
||||||
<button name="action_ssd_approve" string="Approve" class="oe_highlight" type="object" states="ssd" groups="hr_base.group_services_manager"/>
|
<button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee,committee" groups="purchase.group_purchase_user" class="btn-secondary" icon="fa-ban"/>
|
||||||
<button name="action_ssd_reject" string="Reject" type="object" states="ssd" groups="hr_base.group_services_manager"/>
|
<button name="action_ssd_approve" string="Approve" class="btn-primary" type="object" states="ssd" groups="hr_base.group_services_manager" icon="fa-check-circle"/>
|
||||||
<button name="action_ceo_approve" string="Approve" class="oe_highlight" type="object" states="ceo" groups="hr_base.group_general_manager"/>
|
<button name="action_ssd_reject" string="Reject" type="object" states="ssd" groups="hr_base.group_services_manager" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button name="action_ceo_reject" string="Reject" type="object" states="ceo" groups="hr_base.group_general_manager"/>
|
<button name="action_ceo_approve" string="Approve" class="btn-primary" type="object" states="ceo" groups="hr_base.group_general_manager" icon="fa-check-circle"/>
|
||||||
<button name="action_create_agreement" string="Create Agreement" type="object" states="purchase" class="oe_highlight" groups="purchase.group_purchase_manager,purchase.group_purchase_user"/>
|
<button name="action_ceo_reject" string="Reject" type="object" states="ceo" groups="hr_base.group_general_manager" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button name="action_to_draft" string="Back To Draft" type="object" states="rejected" class="oe_highlight" groups="odex25_annual_purchase.group_annual_to_draft" />
|
<button name="action_create_agreement" string="Create Agreement" type="object" states="purchase" class="btn-primary" groups="purchase.group_purchase_manager" icon="fa-file-contract"/>
|
||||||
|
<button name="action_to_draft" string="Back To Draft" type="object" states="rejected" class="btn-secondary" groups="odex25_annual_purchase.group_annual_to_draft" icon="fa-undo" />
|
||||||
|
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,to_manager,procurement,committee,ssd,ceo,approved,rejected,cancel"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,to_manager,procurement,committee,ssd,ceo,approved,rejected,cancel"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet attrs="{'readonly': [('state', '!=', 'draft')]}">
|
<sheet attrs="{'readonly': [('state', '!=', 'draft')]}">
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_create_search_html" string="View" target="_blank" type="object"
|
<button name="action_create_search_html" string="View" target="_blank" type="object"
|
||||||
class="btn-primary"/>
|
class="btn-primary" icon="fa-eye"/>
|
||||||
<button name="action_create_search_pdf" string="Pdf" type="object"
|
<button name="action_create_search_pdf" string="Pdf" type="object"
|
||||||
class="btn-primary"/>
|
class="btn-primary" icon="fa-file-pdf-o"/>
|
||||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_create_search_html" string="View" target="_blank" type="object"
|
<button name="action_create_search_html" string="View" target="_blank" type="object"
|
||||||
class="btn-primary"/>
|
class="btn-primary" icon="fa-eye"/>
|
||||||
<button name="action_create_search_pdf" string="Pdf" type="object"
|
<button name="action_create_search_pdf" string="Pdf" type="object"
|
||||||
class="btn-primary"/>
|
class="btn-primary" icon="fa-file-pdf-o"/>
|
||||||
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
||||||
|
|
@ -41,28 +41,28 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="" create="false" delete="false">
|
<form string="" create="false" delete="false">
|
||||||
<header>
|
<header>
|
||||||
<button name="action_confirm" type="object" class="oe_highlight" states="draft" string="Confirm"
|
<button name="action_confirm" type="object" class="btn-primary" states="draft" string="Confirm"
|
||||||
groups="odex25_purchase_coc.group_coc_user,odex25_purchase_coc.group_coc_manager"/>
|
groups="odex25_purchase_coc.group_coc_user,odex25_purchase_coc.group_coc_manager" icon="fa-check-circle"/>
|
||||||
|
|
||||||
<button name="action_cancel" type="object" class="oe_highlight" states="draft" string="Reject"
|
<button name="action_cancel" type="object" class="btn-danger" states="draft" string="Reject"
|
||||||
groups="odex25_purchase_coc.group_coc_manager"/>
|
groups="odex25_purchase_coc.group_coc_manager" icon="fa-times-circle"/>
|
||||||
<button name="action_approve"
|
<button name="action_approve"
|
||||||
type="object"
|
type="object"
|
||||||
string="Manager Approve"
|
string="Manager Approve"
|
||||||
states="manager"
|
states="manager"
|
||||||
class="oe_highlight"
|
class="btn-primary" icon="fa-check-circle"
|
||||||
groups="odex25_purchase_coc.group_purchase_coc_direct_manager"
|
groups="odex25_purchase_coc.group_purchase_coc_direct_manager"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button name="action_manager_reject"
|
<button name="action_manager_reject"
|
||||||
type="object"
|
type="object"
|
||||||
string="Manager Reject"
|
string="Manager Reject"
|
||||||
states="manager"
|
states="manager"
|
||||||
class="oe_highlight"
|
class="btn-danger" icon="fa-times-circle"
|
||||||
groups="odex25_purchase_coc.group_purchase_coc_direct_manager"
|
groups="odex25_purchase_coc.group_purchase_coc_direct_manager"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button name="action_draft" type="object" class="oe_highlight" states="cancel" string="Set to Draft"/>
|
<button name="action_draft" type="object" class="btn-secondary" states="cancel" string="Set to Draft" icon="fa-undo"/>
|
||||||
<field name="state" widget="statusbar"/>
|
<field name="state" widget="statusbar"/>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ You have processed less product than the initial order.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_confirm" string="Create Backorder" type="object" class="btn-primary"/>
|
<button name="action_confirm" string="Create Backorder" type="object" class="btn-primary" icon="fa-plus-circle"/>
|
||||||
<button name="action_cancel" string="No Backorder" type="object" class="btn-secondary"/>
|
<button name="action_cancel" string="No Backorder" type="object" class="btn-secondary" icon="fa-ban"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,dm,str_pro_department,direct_manager,send_budget,wait_budget,budget_approve,general_supervisor,waiting"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,dm,str_pro_department,direct_manager,send_budget,wait_budget,budget_approve,general_supervisor,waiting"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
||||||
<button name="action_pc_confirm" groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object" string="Approve" states="budget_approve" class="oe_highlight"/>
|
<button name="action_pc_confirm" groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object" string="Approve" states="budget_approve" class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" states="budget_approve" type="action" groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
|
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" states="budget_approve" type="action" groups="governmental_purchase.executive_director_of_purchase_and_contract" class="btn-danger" icon="fa-times-circle"/>
|
||||||
|
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='partner_id']" position="after">
|
<xpath expr="//field[@name='partner_id']" position="after">
|
||||||
|
|
@ -30,9 +30,9 @@
|
||||||
<field name="check_chief_executive" invisible="1"/>
|
<field name="check_chief_executive" invisible="1"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_confirm']" position="replace">
|
<xpath expr="//button[@name='action_confirm']" position="replace">
|
||||||
<button name="action_confirm_button" groups="purchase_requisition_custom.group_direct_manger" type="object" string="Submit" class="oe_highlight" attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
|
<button name="action_confirm_button" groups="purchase_requisition_custom.group_direct_manger" type="object" string="Submit" class="btn-primary" attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}" icon="fa-send"/>
|
||||||
<button name="technical_department" type="object" groups="odex25_taqeem_purchase.strategy_project_group" string="Technical Department" states="str_pro_department" class="oe_highlight"/>
|
<button name="technical_department" type="object" groups="odex25_taqeem_purchase.strategy_project_group" string="Technical Department" states="str_pro_department" class="btn-info" icon="fa-cogs"/>
|
||||||
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" type="action" groups="odex25_taqeem_purchase.strategy_project_group" states="str_pro_department"/>
|
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" type="action" groups="odex25_taqeem_purchase.strategy_project_group" states="str_pro_department" class="btn-danger" icon="fa-times-circle"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<!-- <xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="attributes">
|
<!-- <xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="attributes">
|
||||||
<attribute name="readonly">1</attribute>
|
<attribute name="readonly">1</attribute>
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,10 @@
|
||||||
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
||||||
<button name="action_pc_confirm"
|
<button name="action_pc_confirm"
|
||||||
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
|
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
|
||||||
string="Approve" states="budget_approve" class="oe_highlight"/>
|
string="Approve" states="budget_approve" class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
|
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
|
||||||
states="budget_approve" type="action"
|
states="budget_approve" type="action"
|
||||||
groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
|
groups="governmental_purchase.executive_director_of_purchase_and_contract" class="btn-danger" icon="fa-times-circle"/>
|
||||||
|
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_confirm']" position="replace">
|
<xpath expr="//button[@name='action_confirm']" position="replace">
|
||||||
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
|
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
|
||||||
string="Submit" class="oe_highlight"
|
string="Submit" class="btn-primary" icon="fa-send"
|
||||||
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
|
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//page[@name='base_info_dep_use']" position="replace"/>
|
<xpath expr="//page[@name='base_info_dep_use']" position="replace"/>
|
||||||
|
|
|
||||||
|
|
@ -29,19 +29,19 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_confirm']" position="replace">
|
<xpath expr="//button[@name='action_confirm']" position="replace">
|
||||||
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
|
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
|
||||||
string="Submit" class="oe_highlight"
|
string="Submit" class="btn-primary" icon="fa-send"
|
||||||
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
|
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
|
||||||
|
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
|
||||||
<button name="action_pc_confirm"
|
<button name="action_pc_confirm"
|
||||||
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
|
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
|
||||||
string="Approve" states="budget_approve" class="oe_highlight"/>
|
string="Approve" states="budget_approve" class="btn-primary" icon="fa-check-circle"/>
|
||||||
|
|
||||||
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
|
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
|
||||||
|
|
||||||
states="budget_approve" type="action"
|
states="budget_approve" type="action"
|
||||||
groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
|
groups="governmental_purchase.executive_director_of_purchase_and_contract" class="btn-danger" icon="fa-times-circle"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<!-- <xpath expr="//button[@name='%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d']"-->
|
<!-- <xpath expr="//button[@name='%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d']"-->
|
||||||
<!-- position="replace">-->
|
<!-- position="replace">-->
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
<field name="inherit_id" ref="purchase_requisition.view_purchase_requisition_form"/>
|
<field name="inherit_id" ref="purchase_requisition.view_purchase_requisition_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//button[@name='action_in_progress']" position="after">
|
<xpath expr="//button[@name='action_in_progress']" position="after">
|
||||||
<button name="action_show_portal" attrs="{'invisible':['|','|',('state' , '!=' , 'in_progress' ),('published_in_portal' , '=' , True),('publish_in_portal' , '!=' , True)]}" string="Show in Portal" type="object" class="btn-primary"/>
|
<button name="action_show_portal" attrs="{'invisible':['|','|',('state' , '!=' , 'in_progress' ),('published_in_portal' , '=' , True),('publish_in_portal' , '!=' , True)]}" string="Show in Portal" type="object" class="btn-primary" icon="fa-globe"/>
|
||||||
<button name="extend_availability" attrs="{'invisible':['|',('state' , '!=' , 'open' ),('published_in_portal' , '!=' , True)]}" type="object" string="Extend Availability" />
|
<button name="extend_availability" attrs="{'invisible':['|',('state' , '!=' , 'open' ),('published_in_portal' , '!=' , True)]}" type="object" string="Extend Availability" class="btn-info" icon="fa-clock-o" />
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//div[@class='oe_button_box']" position="inside">
|
<xpath expr="//div[@class='oe_button_box']" position="inside">
|
||||||
<button name="application" type="object" class="oe_stat_button" icon="fa-globe"
|
<button name="application" type="object" class="oe_stat_button" icon="fa-globe"
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_extend" string="Extend" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_extend" string="Extend" type="object" default_focus="1" class="btn-primary" icon="fa-clock-o"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="oe_link" special="cancel" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Online Tender Configuration" create="false" delete="false">
|
<form string="Online Tender Configuration" create="false" delete="false">
|
||||||
<header>
|
<header>
|
||||||
<button name="action_tender" confirm="Are you sure you want to shortlisting this Request?" states="draft" string="Tender" type="object"/>
|
<button name="action_tender" confirm="Are you sure you want to shortlisting this Request?" states="draft" string="Tender" type="object" class="btn-primary" icon="fa-gavel"/>
|
||||||
<button name="action_reject" states="draft" string="Reject" type="object"/>
|
<button name="action_reject" states="draft" string="Reject" type="object" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,tender,contract"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,tender,contract"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
<field name="reject_reason" required="1"/>
|
<field name="reject_reason" required="1"/>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_reject" string="Reject" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_reject" string="Reject" type="object" default_focus="1" class="btn-danger" icon="fa-times-circle"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="oe_link" special="cancel" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="print_report" string="Print" type="object" class="btn-primary"/>
|
<button name="print_report" string="Print" type="object" class="btn-primary" icon="fa-print"/>
|
||||||
<button string="Cancel" class="btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-default" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="print_report" string="Print" type="object" class="btn-primary"/>
|
<button name="print_report" string="Print" type="object" class="btn-primary" icon="fa-print"/>
|
||||||
<button string="Cancel" class="btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-default" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
@ -111,7 +111,7 @@
|
||||||
</group>
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="print_report" string="Print" type="object" class="btn-primary"/>
|
<button name="print_report" string="Print" type="object" class="btn-primary" icon="fa-print"/>
|
||||||
<button string="Cancel" class="btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-default" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times" />
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times" />
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times" />
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times" />
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times" />
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ msgstr ""
|
||||||
#. module: purchase_custom_stock
|
#. module: purchase_custom_stock
|
||||||
#: model:ir.model.fields,field_description:purchase_custom_stock.field_purchase_request__show_approve_warehouse
|
#: model:ir.model.fields,field_description:purchase_custom_stock.field_purchase_request__show_approve_warehouse
|
||||||
msgid "Approve Warehouse"
|
msgid "Approve Warehouse"
|
||||||
msgstr ""
|
msgstr "موافقة المستودع"
|
||||||
|
|
||||||
#. module: purchase_custom_stock
|
#. module: purchase_custom_stock
|
||||||
#: model:ir.model.fields,field_description:purchase_custom_stock.field_asset_operation_return_line__asset_id
|
#: model:ir.model.fields,field_description:purchase_custom_stock.field_asset_operation_return_line__asset_id
|
||||||
|
|
|
||||||
|
|
@ -47,15 +47,15 @@
|
||||||
</button>
|
</button>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="/form/header/button[@name='action_done']" position="replace">
|
<xpath expr="/form/header/button[@name='action_done']" position="replace">
|
||||||
<button name="action_done" type="object" string="Delivery Done" class="oe_highlight"
|
<button name="action_done" type="object" string="Delivery Done" class="btn-success"
|
||||||
groups="purchase_requisition_custom.create_purchase_request"
|
groups="purchase_requisition_custom.create_purchase_request"
|
||||||
attrs="{'invisible':[('show_emp_button' , '=' , False)]}"/>
|
attrs="{'invisible':[('show_emp_button' , '=' , False)]}" icon="fa-check-circle"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='use_analytic']" position="attributes">
|
<xpath expr="//field[@name='use_analytic']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly':[('state','!=','draft')]}</attribute>
|
<attribute name="attrs">{'readonly':[('state','!=','draft')]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//group[1]" position="after">
|
<xpath expr="//group[@name='other_details_group']" position="after">
|
||||||
<group col="2" colspan="2">
|
<group string="Warehouse Management" name="warehouse_management_group">
|
||||||
<field name="view_location_id" invisible="1"/>
|
<field name="view_location_id" invisible="1"/>
|
||||||
<field name="edit_locations" invisible="1"/>
|
<field name="edit_locations" invisible="1"/>
|
||||||
<field name="show_emp_button" invisible="1"/>
|
<field name="show_emp_button" invisible="1"/>
|
||||||
|
|
@ -64,20 +64,12 @@
|
||||||
<field name="show_asset_release_button" invisible="1"/>
|
<field name="show_asset_release_button" invisible="1"/>
|
||||||
<field name="all_assets_released" invisible="1"/>
|
<field name="all_assets_released" invisible="1"/>
|
||||||
<field name="asset_custody_complete" invisible="1"/>
|
<field name="asset_custody_complete" invisible="1"/>
|
||||||
<div>
|
<field name="warehouse_id"
|
||||||
<label for="warehouse_id"/>
|
attrs="{'readonly':['|',('edit_locations' , '=' , False),('state' , '!=' , 'warehouse')]}"
|
||||||
<field name="warehouse_id"
|
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
||||||
attrs="{'readonly':['|',('edit_locations' , '=' , False),('state' , '!=' , 'warehouse')]}"
|
<field name="location_id"
|
||||||
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
attrs="{'readonly':['|',('edit_locations' , '=' , False),('state' , '!=' , 'warehouse')]}"
|
||||||
|
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label for="location_id"/>
|
|
||||||
<field name="location_id"
|
|
||||||
attrs="{'readonly':['|',('edit_locations' , '=' , False),('state' , '!=' , 'warehouse')]}"
|
|
||||||
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</group>
|
</group>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='open_requisition']" position="after">
|
<xpath expr="//button[@name='open_requisition']" position="after">
|
||||||
|
|
@ -104,7 +96,7 @@
|
||||||
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
groups="stock.group_stock_user,stock.group_stock_manager"/>
|
||||||
<button name="action_refuse" type="object" string="Refuse" id="prs_request_refuse"
|
<button name="action_refuse" type="object" string="Refuse" id="prs_request_refuse"
|
||||||
groups="stock.group_stock_manager"
|
groups="stock.group_stock_manager"
|
||||||
attrs="{'invisible' : [('state' , '!=' , 'warehouse')]}"/>
|
attrs="{'invisible' : [('state' , '!=' , 'warehouse')]}" class="btn-danger" icon="fa-times-circle"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='action_draft']" position="before">
|
<xpath expr="//button[@name='action_draft']" position="before">
|
||||||
<button name="create_asset_custody_lines"
|
<button name="create_asset_custody_lines"
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ msgstr "طلب عرض سعر"
|
||||||
#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
|
#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid " No budget for this service "
|
msgid " No budget for this service "
|
||||||
msgstr ""
|
msgstr "لا توجد ميزانية لهذه الخدمة"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.actions.report,print_report_name:purchase_requisition_custom.action_report_committee_meeting_minutes
|
#: model:ir.actions.report,print_report_name:purchase_requisition_custom.action_report_committee_meeting_minutes
|
||||||
|
|
@ -102,13 +102,13 @@ msgstr "الموعد النهائي لاستقبال عروض الاسعار"
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__name
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__name
|
||||||
msgid "Agreement Reference"
|
msgid "Agreement Reference"
|
||||||
msgstr ""
|
msgstr "مرجع الاتفاقية"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__requisition_type_exclusive
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__requisition_type_exclusive
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type_exclusive
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type_exclusive
|
||||||
msgid "Agreement Selection Type"
|
msgid "Agreement Selection Type"
|
||||||
msgstr ""
|
msgstr "نوع اختيار الاتفاقية"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type_id
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type_id
|
||||||
|
|
@ -124,7 +124,7 @@ msgstr "تاريخ توقيع الاتفاقية"
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__already_voted
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__already_voted
|
||||||
msgid "Already Voted"
|
msgid "Already Voted"
|
||||||
msgstr ""
|
msgstr "تم التصويت بالفعل"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__account_id
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__account_id
|
||||||
|
|
@ -2397,7 +2397,7 @@ msgstr "عدد الرسائل غير المقروءة"
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__use_analytic
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__use_analytic
|
||||||
msgid "Use Analytic"
|
msgid "Use Analytic"
|
||||||
msgstr "استخدام حساب تحليلى (بند موازنة) اخر"
|
msgstr "حساب تحليلي آخر؟"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_analytic
|
#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_analytic
|
||||||
|
|
@ -2946,6 +2946,186 @@ msgstr "نوع الطلب"
|
||||||
msgid "Month"
|
msgid "Month"
|
||||||
msgstr "الشهر"
|
msgstr "الشهر"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Request Information"
|
||||||
|
msgstr "معلومات الطلب"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Request Details"
|
||||||
|
msgstr "تفاصيل الطلب"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Vendor"
|
||||||
|
msgstr "المورد"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Accounting"
|
||||||
|
msgstr "المحاسبة"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Enter purchase request justifications..."
|
||||||
|
msgstr "أدخل مبررات طلب الشراء..."
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Enter additional notes..."
|
||||||
|
msgstr "أدخل ملاحظات إضافية..."
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Vendor and Accounting"
|
||||||
|
msgstr "المورد والمحاسبة"
|
||||||
|
|
||||||
|
#. module: purchase_custom_stock
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_custom_stock.purchase_request_form_inherit
|
||||||
|
msgid "Warehouse Management"
|
||||||
|
msgstr "إدارة المستودعات"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Suggested vendor for this purchase request"
|
||||||
|
msgstr "المورد المقترح لهذا الطلب"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Analytic account for budget tracking"
|
||||||
|
msgstr "الحساب التحليلي لتتبع الموازنة"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Other Details"
|
||||||
|
msgstr "تفاصيل أخرى"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Warehouse Management"
|
||||||
|
msgstr "إدارة المستودعات"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Select"
|
||||||
|
msgstr "اختيار"
|
||||||
|
|
||||||
|
#. module: purchase_custom_stock
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_custom_stock.purchase_request_form_inherit
|
||||||
|
msgid "Delivery Done"
|
||||||
|
msgstr "تم التسليم"
|
||||||
|
|
||||||
|
#. module: purchase_custom_stock
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_custom_stock.purchase_request_form_inherit
|
||||||
|
msgid "Create Asset Custody"
|
||||||
|
msgstr "إنشاء عهدة أصول"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Purchase State"
|
||||||
|
msgstr "حالة الشراء"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "State"
|
||||||
|
msgstr "الحالة"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Categories"
|
||||||
|
msgstr "الفئات"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Branch"
|
||||||
|
msgstr "الفرع"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Department"
|
||||||
|
msgstr "القسم"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Employee"
|
||||||
|
msgstr "الموظف"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "التاريخ"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_tree
|
||||||
|
msgid "Request Number"
|
||||||
|
msgstr "رقم الطلب"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Approve Order"
|
||||||
|
msgstr "موافقة الطلب"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "PO To Contract"
|
||||||
|
msgstr "تحويل إلى عقد"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Sign"
|
||||||
|
msgstr "توقيع"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Choose All"
|
||||||
|
msgstr "اختيار الكل"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Send To Committee"
|
||||||
|
msgstr "إرسال للجنة"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
|
||||||
|
msgid "Confirm Purchase"
|
||||||
|
msgstr "تأكيد الشراء"
|
||||||
|
|
||||||
|
#. module: odex25_purchase_coc
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form_view
|
||||||
|
msgid "Manager Approve"
|
||||||
|
msgstr "موافقة المدير"
|
||||||
|
|
||||||
|
#. module: odex25_purchase_coc
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form_view
|
||||||
|
msgid "Manager Reject"
|
||||||
|
msgstr "رفض المدير"
|
||||||
|
|
||||||
|
#. module: vendor_evaluation
|
||||||
|
#: model_terms:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_wizard_view
|
||||||
|
msgid "Evaluate"
|
||||||
|
msgstr "تقييم"
|
||||||
|
|
||||||
|
#. module: odex25_taqeem_purchase
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.competitive_purchase_view
|
||||||
|
msgid "Technical Department"
|
||||||
|
msgstr "القسم الفني"
|
||||||
|
|
||||||
|
#. module: odex25_purchase_coc
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form_view
|
||||||
|
msgid "Create Backorder"
|
||||||
|
msgstr "إنشاء طلب متأخر"
|
||||||
|
|
||||||
|
#. module: odex25_purchase_coc
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form_view
|
||||||
|
msgid "No Backorder"
|
||||||
|
msgstr "بدون طلب متأخر"
|
||||||
|
|
||||||
|
#. module: purchase_requisition_custom
|
||||||
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
|
||||||
|
msgid "Request Lines"
|
||||||
|
msgstr "بنود الطلب"
|
||||||
|
|
||||||
#. module: purchase_requisition_custom
|
#. module: purchase_requisition_custom
|
||||||
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_search
|
#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_search
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
|
|
|
||||||
|
|
@ -12,32 +12,38 @@
|
||||||
<button name="action_submit" groups="purchase_requisition_custom.create_purchase_request"
|
<button name="action_submit" groups="purchase_requisition_custom.create_purchase_request"
|
||||||
type="object"
|
type="object"
|
||||||
string="Submit"
|
string="Submit"
|
||||||
class="oe_highlight"
|
class="btn-primary"
|
||||||
|
icon="fa-paper-plane"
|
||||||
attrs="{'invisible': ['|',('is_creator', '=', False),('state','!=','draft')]}"/>
|
attrs="{'invisible': ['|',('is_creator', '=', False),('state','!=','draft')]}"/>
|
||||||
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger"
|
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger"
|
||||||
type="object" string="Approve" states="direct_manager" class="oe_highlight"/>
|
type="object" string="Approve" states="direct_manager"
|
||||||
|
class="btn-primary" icon="fa-check-circle"/>
|
||||||
|
|
||||||
|
|
||||||
<button name="create_requisition"
|
<button name="create_requisition"
|
||||||
groups="purchase.group_purchase_user,purchase.group_purchase_manager" type="object"
|
groups="purchase.group_purchase_user,purchase.group_purchase_manager" type="object"
|
||||||
string="Create Requisition"
|
string="Create Requisition"
|
||||||
class="oe_highlight"
|
class="btn-primary"
|
||||||
|
icon="fa-file-text-o"
|
||||||
attrs="{'invisible' : ['|',('state' , '!=' , 'waiting'),('purchase_create' , '=' , True)]}"/>
|
attrs="{'invisible' : ['|',('state' , '!=' , 'waiting'),('purchase_create' , '=' , True)]}"/>
|
||||||
|
|
||||||
<button name="create_purchase_order2" type="object" string="Create Purchase Order"
|
<button name="create_purchase_order2" type="object" string="Create Purchase Order"
|
||||||
class="oe_highlight" groups="purchase.group_purchase_user"
|
class="btn-primary" groups="purchase.group_purchase_user"
|
||||||
|
icon="fa-shopping-cart"
|
||||||
attrs="{'invisible' : ['|',('state' , '!=' , 'waiting'),('purchase_create' , '=' , True)]}"/>
|
attrs="{'invisible' : ['|',('state' , '!=' , 'waiting'),('purchase_create' , '=' , True)]}"/>
|
||||||
|
|
||||||
<button name="action_refuse" type="object" string="Refuse" id="prc_request_refuse"
|
<button name="action_refuse" type="object" string="Refuse" id="prc_request_refuse"
|
||||||
groups="purchase_requisition_custom.group_refuse_purchase"
|
groups="purchase_requisition_custom.group_refuse_purchase"
|
||||||
|
class="btn-danger"
|
||||||
|
icon="fa-times-circle"
|
||||||
attrs="{'invisible' : [('state' , 'not in' , ('direct_manager','waiting'))]}"/>
|
attrs="{'invisible' : [('state' , 'not in' , ('direct_manager','waiting'))]}"/>
|
||||||
|
|
||||||
<button name="action_done" type="object" string="Done" class="oe_stat_button"
|
<button name="action_done" type="object" string="Done" class="oe_stat_button"
|
||||||
groups="purchase.group_purchase_manager" states="waiting"/>
|
groups="purchase.group_purchase_manager" states="waiting"
|
||||||
|
icon="fa-check-circle"/>
|
||||||
|
|
||||||
<button name="action_draft" type="object" string="Reset To Draft" class="oe_highlight"
|
<button name="action_draft" type="object" string="Reset To Draft" class="btn-secondary"
|
||||||
states="refuse" groups="purchase_requisition_custom.group_purchase_set_to_draft"/>
|
states="refuse" groups="purchase_requisition_custom.group_purchase_set_to_draft"
|
||||||
|
icon="fa-undo"/>
|
||||||
|
|
||||||
<field name="state" widget="statusbar"/>
|
<field name="state" widget="statusbar"/>
|
||||||
|
|
||||||
|
|
@ -47,11 +53,11 @@
|
||||||
<field name="is_requisition" invisible="1"/>
|
<field name="is_requisition" invisible="1"/>
|
||||||
<field name="is_creator" invisible="1"/>
|
<field name="is_creator" invisible="1"/>
|
||||||
<button class="oe_stat_button" name="open_requisition" type="object"
|
<button class="oe_stat_button" name="open_requisition" type="object"
|
||||||
string="Purchase Agreement" icon="fa-list-ol"
|
string="Purchase Agreement" icon="fa-file-text-o"
|
||||||
attrs="{'invisible' : [('is_requisition' , '=' , False)]}"
|
attrs="{'invisible' : [('is_requisition' , '=' , False)]}"
|
||||||
groups="purchase.group_purchase_user,purchase.group_purchase_manager"/>
|
groups="purchase.group_purchase_user,purchase.group_purchase_manager"/>
|
||||||
<button class="oe_stat_button" name="open_purchase" type="object"
|
<button class="oe_stat_button" name="open_purchase" type="object"
|
||||||
string="Purchase Orders" icon="fa-list-ol"
|
string="Purchase Orders" icon="fa-shopping-cart"
|
||||||
attrs="{'invisible' : [('purchase_create' , '=' , False)]}"
|
attrs="{'invisible' : [('purchase_create' , '=' , False)]}"
|
||||||
groups="purchase.group_purchase_user,purchase.group_purchase_manager"/>
|
groups="purchase.group_purchase_user,purchase.group_purchase_manager"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -61,45 +67,49 @@
|
||||||
<field name="name" required="1" readonly="1" class="oe_inline"/>
|
<field name="name" required="1" readonly="1" class="oe_inline"/>
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
<group col="4" colspan="3">
|
<group>
|
||||||
<field name="by_purchase" groups="purchase.group_purchase_user"/>
|
<group string="Request Information">
|
||||||
|
<field name="date" readonly="1" widget="date"/>
|
||||||
|
<field name="by_purchase" groups="purchase.group_purchase_user"/>
|
||||||
|
<field name="employee_id" attrs="{'readonly':[('by_purchase' , '=' , False)]}" required="1"
|
||||||
|
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"/>
|
||||||
|
<field name="department_id" force_save="1"
|
||||||
|
attrs="{'readonly' : ['|',('state' , '!=' , 'draft'),('by_purchase' , '!=' , True)] , 'required' : [('by_purchase' , '=' , True)]}"
|
||||||
|
readonly="1" context="{'show_department_short': True}"/>
|
||||||
|
<field name="branch_id" readonly="1" context="{'show_branch_short': True}"/>
|
||||||
|
</group>
|
||||||
|
<group string="Request Details">
|
||||||
|
<field name="product_category_ids" widget="many2many_tags"/>
|
||||||
|
<field name="purchase_purpose" required="1"
|
||||||
|
attrs="{'readonly':[('state' , '!=' , 'draft')]}"
|
||||||
|
placeholder="Enter purchase request justifications..."/>
|
||||||
|
<field name="partner_id"
|
||||||
|
domain="[('supplier_rank','>', 0)]"
|
||||||
|
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
||||||
|
attrs="{'readonly':['|',('edit_partner_id' , '=' , False),('state' , '!=' , 'waiting')]}"
|
||||||
|
help="Suggested vendor for this purchase request"/>
|
||||||
|
</group>
|
||||||
|
<group string="Other Details" name="other_details_group">
|
||||||
|
<field name="use_analytic"/>
|
||||||
|
<field name="account_analytic_id"
|
||||||
|
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
||||||
|
attrs="{'invisible':[('use_analytic' , '=' , False)],'required':[('use_analytic' , '=' , True)],'readonly':[('state' , '!=' , 'draft')]}"
|
||||||
|
help="Analytic account for budget tracking"/>
|
||||||
|
</group>
|
||||||
<field name="picking_type_id" invisible="1"/>
|
<field name="picking_type_id" invisible="1"/>
|
||||||
<field name="department_id" force_save="1"
|
|
||||||
attrs="{'readonly' : ['|',('state' , '!=' , 'draft'),('by_purchase' , '!=' , True)] , 'required' : [('by_purchase' , '=' , True)]}"
|
|
||||||
readonly="1" context="{'show_department_short': True}"/>
|
|
||||||
<field name="branch_id" readonly="1" context="{'show_branch_short': True}"/>
|
|
||||||
<field name="employee_id" attrs="{'readonly':[('by_purchase' , '=' , False)]}" required="1"
|
|
||||||
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"/>
|
|
||||||
<field name="product_category_ids" widget="many2many_tags"/>
|
|
||||||
<field name="purchase_purpose" required="1"
|
|
||||||
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
|
|
||||||
<field name="date" readonly="1"/>
|
|
||||||
<field name="purchase_create" invisible="1"/>
|
<field name="purchase_create" invisible="1"/>
|
||||||
<field name="partner_id"
|
|
||||||
domain="[('supplier_rank','>', 0)]"
|
|
||||||
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
|
||||||
attrs="{'readonly':['|',('edit_partner_id' , '=' , False),('state' , '!=' , 'waiting')]}"/>
|
|
||||||
<!-- <div>-->
|
|
||||||
<!-- <label for="use_analytic"/>-->
|
|
||||||
<field name="use_analytic"/>
|
|
||||||
<field name="account_analytic_id"
|
|
||||||
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
|
||||||
attrs="{'invisible':[('use_analytic' , '=' , False)],'required':[('use_analytic' , '=' , True)],'readonly':[('state' , '!=' , 'draft')]}"/>
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
<field name="company_id" invisible="1"/>
|
<field name="company_id" invisible="1"/>
|
||||||
<field name="edit_partner_id" invisible="1"/>
|
<field name="edit_partner_id" invisible="1"/>
|
||||||
|
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="Items" name="purchase_request_info">
|
<page string="Items" name="purchase_request_info" icon="fa-list">
|
||||||
<field name="line_ids" attrs="{'readonly':[('state' , '!=' , 'draft')]}">
|
<field name="line_ids" attrs="{'readonly':[('state' , '!=' , 'draft')]}">
|
||||||
<tree editable="bottom">
|
<tree editable="bottom" string="Request Lines">
|
||||||
<field name="product_id"
|
<field name="product_id"
|
||||||
domain="[('purchase_ok', '=', True)]"
|
domain="[('purchase_ok', '=', True)]"
|
||||||
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
options="{'no_create' : True , 'no_edit' : True ,'no_open' : True}"
|
||||||
optional="show"
|
optional="show"
|
||||||
required="1"/>
|
required="1"/>
|
||||||
|
|
||||||
<field name="uom_id"/>
|
<field name="uom_id"/>
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
|
|
@ -113,8 +123,8 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
<page string="Note">
|
<page string="Note" icon="fa-sticky-note-o">
|
||||||
<field name="note"/>
|
<field name="note" placeholder="Enter additional notes..."/>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
</sheet>
|
</sheet>
|
||||||
|
|
@ -131,15 +141,21 @@
|
||||||
<field name="name">Purchase Request</field>
|
<field name="name">Purchase Request</field>
|
||||||
<field name="model">purchase.request</field>
|
<field name="model">purchase.request</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree>
|
<tree string="Purchase Requests">
|
||||||
<field name="name"/>
|
<field name="name" string="Request Number"/>
|
||||||
<field name="date"/>
|
<field name="date" widget="date" string="Date"/>
|
||||||
<field name="employee_id"/>
|
<field name="employee_id" string="Employee"/>
|
||||||
<field name="department_id" context="{'show_department_short': True}"/>
|
<field name="department_id" string="Department" context="{'show_department_short': True}"/>
|
||||||
<field name="branch_id" context="{'show_branch_short': True}"/>
|
<field name="branch_id" string="Branch" context="{'show_branch_short': True}"/>
|
||||||
<field name="product_category_ids" widget="many2many_tags"/>
|
<field name="product_category_ids" widget="many2many_tags" string="Categories"/>
|
||||||
<field name="state"/>
|
<field name="state" string="State" widget="badge"
|
||||||
<field name="purchase_state_summary" optional="show"/>
|
decoration-muted="state == 'draft'"
|
||||||
|
decoration-warning="state in ['direct_manager', 'wait_for_send']"
|
||||||
|
decoration-info="state in ['waiting', 'warehouse', 'initial']"
|
||||||
|
decoration-primary="state == 'employee'"
|
||||||
|
decoration-success="state == 'done'"
|
||||||
|
decoration-danger="state in ['cancel', 'refuse']"/>
|
||||||
|
<field name="purchase_state_summary" optional="show" widget="badge" string="Purchase State"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
||||||
|
|
@ -171,23 +171,23 @@
|
||||||
<field name="requisition_state" invisible="1"/>
|
<field name="requisition_state" invisible="1"/>
|
||||||
<field name="requisition_type_exclusive" invisible="1"/>
|
<field name="requisition_type_exclusive" invisible="1"/>
|
||||||
<!-- <button type="object" name="action_to_approve" class="oe_highlight" states="to approve" string="Approve"/>-->
|
<!-- <button type="object" name="action_to_approve" class="oe_highlight" states="to approve" string="Approve"/>-->
|
||||||
<button type="object" name="action_sign" class="oe_highlight"
|
<button type="object" name="action_sign" class="btn-primary"
|
||||||
groups="purchase_requisition_custom.group_sign_purchase_order"
|
groups="purchase_requisition_custom.group_sign_purchase_order"
|
||||||
attrs="{'invisible':['|',('requisition_id','=',False),
|
attrs="{'invisible':['|',('requisition_id','=',False),
|
||||||
'|', ('state','in',['sign','purchase','to approve','done',
|
'|', ('state','in',['sign','purchase','to approve','done',
|
||||||
'cancel','budget_rejected','wait_for_send','waiting']), ('is_signed', '=', True)]}"
|
'cancel','budget_rejected','wait_for_send','waiting']), ('is_signed', '=', True)]}"
|
||||||
string="Sign"/>
|
string="Sign" icon="fa-signature"/>
|
||||||
<!-- <button type="object" name="action_approve_po" string="Confirm Purchase" class="oe_highlight"-->
|
<!-- <button type="object" name="action_approve_po" string="Confirm Purchase" class="oe_highlight"-->
|
||||||
<!-- attrs="{'invisible':['|',('requisition_id','=',False),'|','&',('requisition_type_exclusive', '!=','exclusive'),('is_purchase_budget','=',False),('state','not in',('to approve'))]}"/>-->
|
<!-- attrs="{'invisible':['|',('requisition_id','=',False),'|','&',('requisition_type_exclusive', '!=','exclusive'),('is_purchase_budget','=',False),('state','not in',('to approve'))]}"/>-->
|
||||||
<button type="object" name="action_approve_po" string="Confirm Purchase" class="oe_highlight" invisible="1"/>
|
<button type="object" name="action_approve_po" string="Confirm Purchase" class="btn-primary" invisible="1" icon="fa-check-circle"/>
|
||||||
|
|
||||||
<button type="object" name="action_select" groups="purchase_requisition_custom.committe_member"
|
<button type="object" name="action_select" groups="purchase_requisition_custom.committe_member"
|
||||||
attrs="{'invisible':['|', ('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
|
attrs="{'invisible':['|', ('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
|
||||||
string="Select"/>
|
string="Select" class="btn-primary" icon="fa-check-circle"/>
|
||||||
|
|
||||||
<button type="object" name="action_refuse" groups="purchase_requisition_custom.committe_member"
|
<button type="object" name="action_refuse" groups="purchase_requisition_custom.committe_member"
|
||||||
attrs="{'invisible':['|',('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
|
attrs="{'invisible':['|',('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
|
||||||
string="Refuse"/>
|
string="Refuse" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button type="object" name="action_recommend"
|
<button type="object" name="action_recommend"
|
||||||
groups="purchase_requisition_custom.group_select_recommended_offer"
|
groups="purchase_requisition_custom.group_select_recommended_offer"
|
||||||
confirm="Are you sure you want to process ?"
|
confirm="Are you sure you want to process ?"
|
||||||
|
|
@ -197,28 +197,30 @@
|
||||||
<button type="object" name="action_unsign"
|
<button type="object" name="action_unsign"
|
||||||
groups="purchase_requisition_custom.group_unsign_purchase_order" string="UnSign"
|
groups="purchase_requisition_custom.group_unsign_purchase_order" string="UnSign"
|
||||||
states="sign"/>
|
states="sign"/>
|
||||||
<button type="object" name="budget_resend" string="Resend To Budget Check" class="oe_highlight"
|
<button type="object" name="budget_resend" string="Resend To Budget Check" class="btn-info"
|
||||||
states="budget_rejected"/>
|
states="budget_rejected" icon="fa-refresh"/>
|
||||||
<button type="object" name="action_budget" string="Send To Budget Check" class="oe_highlight"
|
<button type="object" name="action_budget" string="Send To Budget Check" class="btn-primary"
|
||||||
attrs="{'invisible':[('hide_action_budget_button', '=', True)]}"/>
|
attrs="{'invisible':[('hide_action_budget_button', '=', True)]}" icon="fa-send"/>
|
||||||
<button name="action_skip_budget" type="object" string="Skip Budget"
|
<button name="action_skip_budget" type="object" string="Skip Budget"
|
||||||
attrs="{'invisible':[('hide_action_budget_button', '=', True)]}"
|
attrs="{'invisible':[('hide_action_budget_button', '=', True)]}"
|
||||||
groups="purchase_requisition_custom.group_skip_purchase_budget"/>
|
groups="purchase_requisition_custom.group_skip_purchase_budget"
|
||||||
|
class="btn-warning" icon="fa-forward"/>
|
||||||
<!-- <button name="button_draft" states="cancel" string="Set to Draft" type="object"/>-->
|
<!-- <button name="button_draft" states="cancel" string="Set to Draft" type="object"/>-->
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='button_approve']" position="replace">
|
<xpath expr="//button[@name='button_approve']" position="replace">
|
||||||
<button name="button_approve" type="object"
|
<button name="button_approve" type="object"
|
||||||
attrs="{'invisible':['|',('requisition_id','!=',False),('state','not in',('to approve'))]}"
|
attrs="{'invisible':['|',('requisition_id','!=',False),('state','not in',('to approve'))]}"
|
||||||
string="Approve Order" class="oe_highlight" groups="purchase.group_purchase_manager"/>
|
string="Approve Order" class="btn-primary" groups="purchase.group_purchase_manager" icon="fa-check-circle"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='button_draft']" position="after">
|
<xpath expr="//button[@name='button_draft']" position="after">
|
||||||
|
|
||||||
<button string='PO To Contract' name="open_convert_po_contract" type="object"
|
<button string='PO To Contract' name="open_convert_po_contract" type="object"
|
||||||
class="oe_highlight" groups="purchase.group_purchase_manager"
|
class="btn-info" groups="purchase.group_purchase_manager" icon="fa-file-contract"
|
||||||
attrs="{'invisible':[('state','in',('draft','wait','wait_for_send','sent','to approve','sign','waiting','purchase','cancel'))]}"/>
|
attrs="{'invisible':[('state','in',('draft','wait','wait_for_send','sent','to approve','sign','waiting','purchase','cancel'))]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//button[@name='button_draft']" position="attributes">
|
<xpath expr="//button[@name='button_draft']" position="attributes">
|
||||||
<attribute name="class">oe_highlight</attribute>
|
<attribute name="class">btn-warning</attribute>
|
||||||
|
<attribute name="icon">fa-undo</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='date_order']" position="after">
|
<xpath expr="//field[@name='date_order']" position="after">
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
|
|
@ -233,7 +235,8 @@
|
||||||
<xpath expr="/form/header/button[@id='draft_confirm']" position="attributes">
|
<xpath expr="/form/header/button[@id='draft_confirm']" position="attributes">
|
||||||
<attribute name="groups">purchase.group_purchase_manager</attribute>
|
<attribute name="groups">purchase.group_purchase_manager</attribute>
|
||||||
<attribute name="states">draft</attribute>
|
<attribute name="states">draft</attribute>
|
||||||
<attribute name="class">oe_highlight</attribute>
|
<attribute name="class">btn-primary</attribute>
|
||||||
|
<attribute name="icon">fa-check-circle</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<!-- ('is_purchase_budget', '=', False)-->
|
<!-- ('is_purchase_budget', '=', False)-->
|
||||||
<xpath expr="/form/header/button[@id='bid_confirm']" position="attributes">
|
<xpath expr="/form/header/button[@id='bid_confirm']" position="attributes">
|
||||||
|
|
@ -310,9 +313,9 @@
|
||||||
<field name="purpose" attrs="{'readonly': [('state','in',['done','cancel'])]}"/>
|
<field name="purpose" attrs="{'readonly': [('state','in',['done','cancel'])]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='order_line']" position="before">
|
<xpath expr="//field[@name='order_line']" position="before">
|
||||||
<button name="action_select_all" class="oe_highlight" type="object"
|
<button name="action_select_all" class="btn-info" type="object"
|
||||||
attrs="{'invisible':[('state','in',('done','cancel','waiting', 'sign','purchase'))]}"
|
attrs="{'invisible':[('state','in',('done','cancel','waiting', 'sign','purchase'))]}"
|
||||||
string="Choose All"/>
|
string="Choose All" icon="fa-check-square"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
<xpath expr="//field[@name='order_line']/tree//field[@name='name']" position="after">
|
<xpath expr="//field[@name='order_line']/tree//field[@name='name']" position="after">
|
||||||
|
|
@ -381,18 +384,19 @@
|
||||||
<button type="object" groups="purchase_requisition_custom.group_accept_purchase_requisition"
|
<button type="object" groups="purchase_requisition_custom.group_accept_purchase_requisition"
|
||||||
name="action_accept" string="Accept"
|
name="action_accept" string="Accept"
|
||||||
attrs="{'invisible':['|',('state','!=','in_progress'),('type','!=','project')]}"
|
attrs="{'invisible':['|',('state','!=','in_progress'),('type','!=','project')]}"
|
||||||
class="oe_highlight"/>
|
class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button type="object" groups="purchase_requisition_custom.group_quotation_purchase_requisition"
|
<button type="object" groups="purchase_requisition_custom.group_quotation_purchase_requisition"
|
||||||
name="action_quotation" string="Quotation"
|
name="action_quotation" string="Quotation"
|
||||||
attrs="{'invisible':['&','|',('state','!=','accept'),('type','!=','project'),'|',('state','not in',('in_progress', 'ongoing','rejected_by_committee')),('type','!=','operational')]}"
|
attrs="{'invisible':['&','|',('state','!=','accept'),('type','!=','project'),'|',('state','not in',('in_progress', 'ongoing','rejected_by_committee')),('type','!=','operational')]}"
|
||||||
class="btn-primary"/>
|
class="btn-primary"/>
|
||||||
<button type="object" groups="purchase.group_purchase_user" name="action_budget"
|
<button type="object" groups="purchase.group_purchase_user" name="action_budget"
|
||||||
string="Send To Budget" attrs="{'invisible':['|', ('state','!=', 'purchase_manager'),('is_purchase_budget','=',False)]}"
|
string="Send To Budget" attrs="{'invisible':['|', ('state','!=', 'purchase_manager'),('is_purchase_budget','=',False)]}"
|
||||||
class="btn-primary"/>
|
class="btn-primary" icon="fa-send"/>
|
||||||
|
|
||||||
<button name="action_skip_purchase_budget" type="object" string="Skip Budget"
|
<button name="action_skip_purchase_budget" type="object" string="Skip Budget"
|
||||||
attrs="{'invisible':['|', ('state','!=', 'purchase_manager'),('is_purchase_budget','=',False)]}"
|
attrs="{'invisible':['|', ('state','!=', 'purchase_manager'),('is_purchase_budget','=',False)]}"
|
||||||
groups="purchase_requisition_custom.group_skip_purchase_budget"/>
|
groups="purchase_requisition_custom.group_skip_purchase_budget"
|
||||||
|
class="btn-warning" icon="fa-forward"/>
|
||||||
|
|
||||||
<button type="object" groups="purchase_requisition_custom.group_approve_purchase_requisition"
|
<button type="object" groups="purchase_requisition_custom.group_approve_purchase_requisition"
|
||||||
name="action_approve" string="Approve" states="checked" class="btn-primary"/>
|
name="action_approve" string="Approve" states="checked" class="btn-primary"/>
|
||||||
|
|
@ -402,9 +406,9 @@
|
||||||
<button type="object" groups="purchase_requisition_custom.purchase_requisition_third_approve"
|
<button type="object" groups="purchase_requisition_custom.purchase_requisition_third_approve"
|
||||||
name="third_approve" string="Approve" states="third_approve" class="btn-primary"/>
|
name="third_approve" string="Approve" states="third_approve" class="btn-primary"/>
|
||||||
|
|
||||||
<button name="to_committee" class="oe_highlight"
|
<button name="to_committee" class="btn-info"
|
||||||
attrs="{'invisible' : ['|','|',('order_count','=', 0),('purchase_commitee','=',False),'&',('purchase_commitee','=',True),('sent_to_commitee','=', True)]}"
|
attrs="{'invisible' : ['|','|',('order_count','=', 0),('purchase_commitee','=',False),'&',('purchase_commitee','=',True),('sent_to_commitee','=', True)]}"
|
||||||
type="object" string="Send To Committee"
|
type="object" string="Send To Committee" icon="fa-users"
|
||||||
groups="purchase_requisition_custom.purchase_rfq_send_to_committee"/>
|
groups="purchase_requisition_custom.purchase_rfq_send_to_committee"/>
|
||||||
|
|
||||||
<field name="sent_to_commitee" invisible="1"/>
|
<field name="sent_to_commitee" invisible="1"/>
|
||||||
|
|
@ -619,8 +623,8 @@
|
||||||
<field name="origin" invisible="1"/>
|
<field name="origin" invisible="1"/>
|
||||||
<field name="reject_reason" required="1"/>
|
<field name="reject_reason" required="1"/>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_reject" string="Confirm" type="object" class="oe_highlight"/>
|
<button name="action_reject" string="Confirm" type="object" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button string="Cancel" class="btn btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
@ -634,8 +638,8 @@
|
||||||
<field name="order_id" invisible="1"/>
|
<field name="order_id" invisible="1"/>
|
||||||
<field name="select_reason" required="1"/>
|
<field name="select_reason" required="1"/>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_select" string="Confirm" type="object" class="oe_highlight"/>
|
<button name="action_select" string="Confirm" type="object" class="btn-primary" icon="fa-check-circle"/>
|
||||||
<button string="Cancel" class="btn btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
@ -651,8 +655,8 @@
|
||||||
<field name="order_id" invisible="1"/>
|
<field name="order_id" invisible="1"/>
|
||||||
<field name="refuse_reason" required="1"/>
|
<field name="refuse_reason" required="1"/>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_refuse" string="Confirm" type="object" class="oe_highlight"/>
|
<button name="action_refuse" string="Confirm" type="object" class="btn-danger" icon="fa-times-circle"/>
|
||||||
<button string="Cancel" class="btn btn-default" special="cancel"/>
|
<button string="Cancel" class="btn-secondary" special="cancel" icon="fa-times"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="reason"/>
|
<field name="reason"/>
|
||||||
<footer>
|
<footer>
|
||||||
<button string='Save' name="request_cancel_reason" type="object" class="oe_highlight"/>
|
<button string='Save' name="request_cancel_reason" type="object" class="btn-primary" icon="fa-save"/>
|
||||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<button string='Save' name="action_create_contract" type="object" class="oe_highlight"/>
|
<button string='Save' name="action_create_contract" type="object" class="btn-primary" icon="fa-save"/>
|
||||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<field name="inherit_id" ref="account.view_move_form"/>
|
<field name="inherit_id" ref="account.view_move_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//button[last()]" position="before">
|
<xpath expr="//button[last()]" position="before">
|
||||||
<button name="action_vendor_eval" type="object" string="Evaluate"/>
|
<button name="action_vendor_eval" type="object" string="Evaluate" class="btn-info" icon="fa-star"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//button[@name='button_confirm']" position="before">
|
<xpath expr="//button[@name='button_confirm']" position="before">
|
||||||
<button name="action_vendor_eval" type="object" string="Evaluate" attrs="{'invisible':[('requisition_id','=',False)]}" />
|
<button name="action_vendor_eval" type="object" string="Evaluate" attrs="{'invisible':[('requisition_id','=',False)]}" class="btn-info" icon="fa-star" />
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<field name="inherit_id" ref="stock.view_picking_form"/>
|
<field name="inherit_id" ref="stock.view_picking_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//button[@name='button_validate']" position="before">
|
<xpath expr="//button[@name='button_validate']" position="before">
|
||||||
<button name="action_vendor_eval" type="object" string="Evaluate"/>
|
<button name="action_vendor_eval" type="object" string="Evaluate" class="btn-info" icon="fa-star"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<div>
|
<div>
|
||||||
<button name="action_print" string="Print" type="object" default_focus="1" class="oe_highlight"/>
|
<button name="action_print" string="Print" type="object" default_focus="1" class="btn-primary" icon="fa-print"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
<button string="Cancel" class="oe_link" special="cancel" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue