diff --git a/README.md b/README.md index 3a99e22f..490ff5b8 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ This projects provides a highly opinionated way to develop Odoo and Odoo modules * **Community Edition**: Checkout the Odoo Community Edition and start editing the source code * **Enterprise Modules**: Checkout the Odoo enterprise modules and deploy them into the Odoo Docker container or the Odoo source. * **Develop Modules**: Scaffold a new module, develop new Odoo features locally and [much more](./task.md) -* **Customizing Snippets**: See [snippets](./snippets.md) to find various Odoo view edits +* **Customizing Snippets**: Create [snippets](./snippets.md) and push them to an Odoo database +* **Odoo Scripts**: Develope scripts to patch Odoo modules ## Requirements @@ -43,6 +44,7 @@ task checkout 14.0 # or task checkout 15.0 ``` + Install [Odoo scripts](https://github.com/Mint-System/Ansible-Playbooks/tree/master/roles/odoo-scripts) ```bash @@ -83,12 +85,6 @@ Open browser to [http://localhost:8069](http://localhost:8069) and login with `a docker-odoo-install -m show_db_name ``` -**Save config with Docker** - -```bash -docker exec -it odoo bin/bash -c "odoo -s -d odoo --db_host \$HOST -r \$USER -w \$PASSWORD" -``` - ### Native Run Odoo from source. @@ -133,12 +129,12 @@ Open browser to [http://localhost:8069](http://localhost:8069) and login with `a Scaffold a new module. ```bash -task create-module project_report +task create-module addons/project_report ``` ### Common -Instructions that are true for Docker and Source usage paths. +Instructions that are true for Docker and native usage paths. **Enable developer mode** diff --git a/config/checkout_files b/config/checkout_files index 04cbe48c..02976417 100644 --- a/config/checkout_files +++ b/config/checkout_files @@ -9,7 +9,6 @@ package.json package-lock.json .gitignore .vercelignore -config/addons_path config/checkout_files logo.png docker-compose.yml diff --git a/scripts/odoo13_hr_leave_calendar_name_patch b/scripts/odoo13_hr_leave_calendar_name_patch new file mode 100755 index 00000000..ae707d6b --- /dev/null +++ b/scripts/odoo13_hr_leave_calendar_name_patch @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="'name': meeting_name," +REPLACE="'name': meeting_name.replace('on Time Off ', holiday.holiday_status_id.name)," + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_hr_leave_disable_date_check_patch b/scripts/odoo13_hr_leave_disable_date_check_patch new file mode 100755 index 00000000..68f1f195 --- /dev/null +++ b/scripts/odoo13_hr_leave_disable_date_check_patch @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="if not is_officer:" +REPLACE="if not True:" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_hr_leave_refused_note_patch b/scripts/odoo13_hr_leave_refused_note_patch new file mode 100755 index 00000000..ac29fc11 --- /dev/null +++ b/scripts/odoo13_hr_leave_refused_note_patch @@ -0,0 +1,35 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="body=_('Your %s planned on %s has been refused') % (holiday.holiday_status_id.display_name, holiday.date_from)," +IFS='' read -r -d '' REPLACE << EOM + body=(_('Your %s planned on %s has been refused') % (holiday.holiday_status_id.display_name, holiday.date_from)) + _('
Note: %s') % (holiday.sudo().report_note), +EOM + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +LINE=$(grep -n "$FIND" $FILE | cut -f1 -d:) + +# Find and append +awk -v n="$LINE" -v s="$REPLACE" '{ if(NR == n) {print s} else {print} }' $FILE > $FILE.tmp && mv $FILE.tmp $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_hr_leave_report_note_patch b/scripts/odoo13_hr_leave_report_note_patch new file mode 100755 index 00000000..2a8b938c --- /dev/null +++ b/scripts/odoo13_hr_leave_report_note_patch @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="report_note = fields.Text('HR Comments', copy=False, groups=\"hr_holidays.group_hr_holidays_manager\")" +REPLACE="report_note = fields.Text('HR Comments', copy=False, groups=\"hr_holidays.group_hr_holidays_responsible\")" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_hr_leave_translation_patch b/scripts/odoo13_hr_leave_translation_patch new file mode 100755 index 00000000..c72eeaf3 --- /dev/null +++ b/scripts/odoo13_hr_leave_translation_patch @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="body=_('Your %s planned on %s has been accepted' % (holiday.holiday_status_id.display_name, holiday.date_from))," +REPLACE="body=_('Your %s planned on %s has been accepted') % (holiday.holiday_status_id.display_name, holiday.date_from)," + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_hr_leave_update_note_patch b/scripts/odoo13_hr_leave_update_note_patch new file mode 100755 index 00000000..0fc4fcdd --- /dev/null +++ b/scripts/odoo13_hr_leave_update_note_patch @@ -0,0 +1,36 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr_holidays/models/hr_leave.py" +FIND="note = _('New %s Request created by %s from %s to %s') % (holiday.holiday_status_id.name, holiday.create_uid.name, start, end)" +IFS='' read -r -d '' APPEND << EOM + if holiday.name: + note += _('
Comment: %s') % (holiday.name) +EOM + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +LINE=$(grep -n "$FIND" $FILE | cut -f1 -d:) + +# Find and append +awk -v n="$LINE" -v s="$APPEND" 'NR-1 == n {print s} {print}' $FILE > $FILE.tmp && mv $FILE.tmp $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_project_task_editable_date_assign_patch b/scripts/odoo13_project_task_editable_date_assign_patch new file mode 100755 index 00000000..02ae1205 --- /dev/null +++ b/scripts/odoo13_project_task_editable_date_assign_patch @@ -0,0 +1,34 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/project/models/project.py" +FIND="date_assign = fields.Datetime(string='Assigning Date', index=True, copy=False, readonly=True)" +REPLACE="date_assign = fields.Datetime(string='Assigning Date', index=True, copy=False, readonly=False)" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Remove file +rm -f $FILE + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_web_timeline_nounassigned_patch b/scripts/odoo13_web_timeline_nounassigned_patch new file mode 100755 index 00000000..579170a9 --- /dev/null +++ b/scripts/odoo13_web_timeline_nounassigned_patch @@ -0,0 +1,30 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/mnt/addons" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}/web_timeline/static/src/js/timeline_renderer.js" +FIND='groups.push({id: -1, content: _t("UNASSIGNED<\/b>")});' + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND//g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo13_web_timeline_parameter_patch b/scripts/odoo13_web_timeline_parameter_patch new file mode 100755 index 00000000..7b79b2af --- /dev/null +++ b/scripts/odoo13_web_timeline_parameter_patch @@ -0,0 +1,31 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/mnt/addons" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}/web_timeline/static/src/js/timeline_view.js" +FIND="orientation: \"both\"," +REPLACE="orientation: attrs.orientation ? JSON.parse(attrs.orientation) : {item: \"top\"}," + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo14_delivery_patch b/scripts/odoo14_delivery_patch new file mode 100755 index 00000000..65d27653 --- /dev/null +++ b/scripts/odoo14_delivery_patch @@ -0,0 +1,34 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/delivery/__manifest__.py" +FIND="'sale_stock', 'sale_management'" +REPLACE="'sale_stock'" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Remove file +rm -f $FILE + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo14_gio_payroll_custom_employee_patch b/scripts/odoo14_gio_payroll_custom_employee_patch new file mode 100755 index 00000000..876a069c --- /dev/null +++ b/scripts/odoo14_gio_payroll_custom_employee_patch @@ -0,0 +1,41 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/gio_payroll_custom/models/hr_employee.py" +FIND="from odoo import api, fields, models, _" +IFS='' read -r -d '' APPEND << EOM +from odoo import api, fields, models, _ + + +class EmployeePublic(models.Model): + _inherit = 'hr.employee.public' + + gio_children_training = fields.Integer(string="Anzahl Kinder im Studium") +EOM + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +LINE=$(grep -n "$FIND" $FILE | cut -f1 -d:) + +# Find and append +awk -v n="$LINE" -v s="$APPEND" 'NR-1 == n {print s} {print}' $FILE > $FILE.tmp && mv $FILE.tmp $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo14_l10n_ch_base_bank_patch b/scripts/odoo14_l10n_ch_base_bank_patch new file mode 100755 index 00000000..75496054 --- /dev/null +++ b/scripts/odoo14_l10n_ch_base_bank_patch @@ -0,0 +1,34 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/mnt/addons/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}l10n_ch_base_bank/models/invoice.py" +FIND="bank_acc.acc_type != \"qr-iban\"" +REPLACE="bank_acc.acc_type == \"qr-iban\"" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Remove file +rm -f $FILE + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo14_l10n_ch_isr_patch b/scripts/odoo14_l10n_ch_isr_patch new file mode 100755 index 00000000..bc4ee8e3 --- /dev/null +++ b/scripts/odoo14_l10n_ch_isr_patch @@ -0,0 +1,34 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/mnt/addons/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}l10n_ch_base_bank/models/partner_bank.py" +FIND="ISR {}" +REPLACE="{}" + +# Get filename +FILE=`basename "$FILE_PATH"` + +# Copy from docker +docker cp "$CONTAINER":"$FILE_PATH" . + +# Find and replace +sed -i'' "s/$FIND/$REPLACE/g" $FILE + +# Copy back to docker +docker cp $FILE "$CONTAINER":"$FILE_PATH" + +# Remove file +rm -f $FILE + +# Register patch installation +echo "Patch $SCRIPT applied." +touch "/etc/odoo/${SCRIPT}_${CONTAINER}_installed" diff --git a/scripts/odoo14_res_users_footer b/scripts/odoo14_res_users_footer new file mode 100755 index 00000000..c762e5d4 --- /dev/null +++ b/scripts/odoo14_res_users_footer @@ -0,0 +1,33 @@ +#!/bin/bash + +# Get script name +SCRIPT=$(basename "$0") + +# First param is docker container +CONTAINER=$1 + +# Default configuration +PACKAGE_PATH="/usr/lib/python3/dist-packages/" + +# Custom configuration +FILE_PATH="${PACKAGE_PATH}odoo/addons/hr/views/res_users.xml" +FIND='