First commit waiting for Budget Alert

This commit is contained in:
2025-09-04 13:37:35 +01:00
commit 2d681f27f5
4563 changed files with 1061534 additions and 0 deletions

View File

@ -0,0 +1,16 @@
apply plugin: "com.axelor.app-module"
apply from: "../version.gradle"
apply {
version = openSuiteVersion
}
axelor {
title "Axelor Business Support"
description "Axelor Business Support Module"
}
dependencies {
compile project(":modules:axelor-business-project")
}

View File

@ -0,0 +1,30 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.businesssupport.db.repo;
import com.axelor.apps.businessproject.db.repo.TeamTaskBusinessProjectRepository;
import com.axelor.team.db.TeamTask;
public class TeamTaskBusinessSupportRepository extends TeamTaskBusinessProjectRepository {
@Override
public TeamTask copy(TeamTask entity, boolean deep) {
entity.setTargetVersion(null);
return super.copy(entity, deep);
}
}

View File

@ -0,0 +1,36 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.businesssupport.module;
import com.axelor.app.AxelorModule;
import com.axelor.apps.businessproject.db.repo.TeamTaskBusinessProjectRepository;
import com.axelor.apps.businessproject.service.ProjectBusinessServiceImpl;
import com.axelor.apps.businessproject.service.TeamTaskBusinessProjectServiceImpl;
import com.axelor.apps.businesssupport.db.repo.TeamTaskBusinessSupportRepository;
import com.axelor.apps.businesssupport.service.ProjectBusinessSupportServiceImpl;
import com.axelor.apps.businesssupport.service.TeamTaskBusinessSupportServiceImpl;
public class BusinessSupportModule extends AxelorModule {
@Override
protected void configure() {
bind(TeamTaskBusinessProjectServiceImpl.class).to(TeamTaskBusinessSupportServiceImpl.class);
bind(TeamTaskBusinessProjectRepository.class).to(TeamTaskBusinessSupportRepository.class);
bind(ProjectBusinessServiceImpl.class).to(ProjectBusinessSupportServiceImpl.class);
}
}

View File

@ -0,0 +1,42 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.businesssupport.service;
import com.axelor.apps.businessproject.service.ProjectBusinessServiceImpl;
import com.axelor.apps.project.db.Project;
import com.axelor.apps.project.db.TaskTemplate;
import com.axelor.apps.project.db.repo.ProjectRepository;
import com.axelor.team.db.TeamTask;
import com.google.inject.Inject;
public class ProjectBusinessSupportServiceImpl extends ProjectBusinessServiceImpl {
@Inject
public ProjectBusinessSupportServiceImpl(ProjectRepository projectRepository) {
super(projectRepository);
}
@Override
public TeamTask createTask(TaskTemplate taskTemplate, Project project) {
TeamTask task = super.createTask(taskTemplate, project);
task.setInternalDescription(taskTemplate.getInternalDescription());
return task;
}
}

View File

@ -0,0 +1,69 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.businesssupport.service;
import com.axelor.apps.base.db.repo.PriceListLineRepository;
import com.axelor.apps.base.service.PriceListService;
import com.axelor.apps.businessproject.service.TeamTaskBusinessProjectServiceImpl;
import com.axelor.apps.project.db.Project;
import com.axelor.apps.project.db.TaskTemplate;
import com.axelor.team.db.TeamTask;
import com.axelor.team.db.repo.TeamTaskRepository;
import com.google.inject.Inject;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class TeamTaskBusinessSupportServiceImpl extends TeamTaskBusinessProjectServiceImpl {
@Inject
public TeamTaskBusinessSupportServiceImpl(
TeamTaskRepository teamTaskRepo,
PriceListLineRepository priceListLineRepository,
PriceListService priceListService) {
super(teamTaskRepo, priceListLineRepository, priceListService);
}
@Override
protected void setModuleFields(TeamTask teamTask, LocalDate date, TeamTask newTeamTask) {
super.setModuleFields(teamTask, date, newTeamTask);
// Module 'business support' fields
newTeamTask.setAssignment(TeamTaskRepository.ASSIGNMENT_PROVIDER);
}
@Override
protected void updateModuleFields(TeamTask teamTask, TeamTask nextTeamTask) {
super.updateModuleFields(teamTask, nextTeamTask);
// Module 'business support' fields
nextTeamTask.setAssignment(TeamTaskRepository.ASSIGNMENT_PROVIDER);
nextTeamTask.setIsPrivate(teamTask.getIsPrivate());
nextTeamTask.setTargetVersion(teamTask.getTargetVersion());
}
@Override
public TeamTask create(
TaskTemplate template, Project project, LocalDateTime date, BigDecimal qty) {
TeamTask task = super.create(template, project, date, qty);
task.setInternalDescription(template.getInternalDescription());
return task;
}
}

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
<input file="base_appBusinessSupport.csv" separator=";" type="com.axelor.apps.base.db.AppBusinessSupport" call="com.axelor.csv.script.ImportApp:importApp">
<bind column="dependsOn" to="dependsOnSet" search="self.code in :dependsOn" eval="dependsOn.split(',') as List"/>
</input>
<input file="auth_role.csv" separator=";" type="com.axelor.auth.db.Role" search="self.name = :name"/>
<input file="meta_metaMenu.csv" separator=";" type="com.axelor.meta.db.MetaMenu" search="self.name = :name" update="true" />
<input file="auth_permission.csv" separator=";" type="com.axelor.auth.db.Permission" search="self.name = :name" call="com.axelor.csv.script.ImportPermission:importPermissionToRole">
<bind to="canRead" eval="can_read == 'x' ? 'true' : 'false'"/>
<bind to="canWrite" eval="can_write == 'x' ? 'true' : 'false'"/>
<bind to="canCreate" eval="can_create == 'x' ? 'true' : 'false'"/>
<bind to="canRemove" eval="can_remove == 'x' ? 'true' : 'false'"/>
<bind to="canExport" eval="can_export == 'x' ? 'true' : 'false'"/>
</input>
</csv-inputs>

View File

@ -0,0 +1,13 @@
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
"perm.project.teamTask.all";"com.axelor.team.db.TeamTask";"x";"x";"x";"x";"x";"self.project IN (SELECT p FROM Project p WHERE ? MEMBER OF p.membersUserSet)";"__user__";"role.customer"
"perm.project.project.r";"com.axelor.apps.project.db.Project";"x";;;;;"(?) MEMBER OF self.membersUserSet";"__user__";"role.customer"
"perm.project.teamTaskCategory.r";"com.axelor.apps.project.db.TeamTaskCategory";"x";;;;;;;"role.customer"
"perm.base.unit.r";"com.axelor.apps.base.db.Unit";"x";;;;;;;"role.customer"
"perm.businesssupport.projectVersion.r";"com.axelor.apps.businesssupport.db.ProjectVersion";"x";;;;;;;"role.customer"
"perm.base.currency.r";"com.axelor.apps.base.db.Currency";"x";;;;;;;"role.customer"
"perm.base.product.r";"com.axelor.apps.base.db.Product";"x";;;;;;;"role.customer"
"perm.base.team.r";"com.axelor.team.db.Team";"x";;;;;;;"role.customer"
"perm.project.projectPlanningTime.r";"com.axelor.apps.project.db.ProjectPlanningTime";"x";;;;;;;"role.customer"
"perm.base.timer.r";"com.axelor.apps.base.db.Timer";"x";;;;;;;"role.customer"
"perm.meta.menu.r";"com.axelor.meta.db.MetaMenu";"x";;;;;;;"role.customer"
"perm.businessproject.invoicingProject.all";"com.axelor.apps.businessproject.db.InvoicingProject";"x";"x";"x";"x";"x";"self.project IN (SELECT p FROM Project p WHERE ? MEMBER OF p.membersUserSet)";"__user__";"role.customer"
1 name object can_read can_write can_create can_remove can_export condition conditionParams roleName
2 perm.project.teamTask.all com.axelor.team.db.TeamTask x x x x x self.project IN (SELECT p FROM Project p WHERE ? MEMBER OF p.membersUserSet) __user__ role.customer
3 perm.project.project.r com.axelor.apps.project.db.Project x (?) MEMBER OF self.membersUserSet __user__ role.customer
4 perm.project.teamTaskCategory.r com.axelor.apps.project.db.TeamTaskCategory x role.customer
5 perm.base.unit.r com.axelor.apps.base.db.Unit x role.customer
6 perm.businesssupport.projectVersion.r com.axelor.apps.businesssupport.db.ProjectVersion x role.customer
7 perm.base.currency.r com.axelor.apps.base.db.Currency x role.customer
8 perm.base.product.r com.axelor.apps.base.db.Product x role.customer
9 perm.base.team.r com.axelor.team.db.Team x role.customer
10 perm.project.projectPlanningTime.r com.axelor.apps.project.db.ProjectPlanningTime x role.customer
11 perm.base.timer.r com.axelor.apps.base.db.Timer x role.customer
12 perm.meta.menu.r com.axelor.meta.db.MetaMenu x role.customer
13 perm.businessproject.invoicingProject.all com.axelor.apps.businessproject.db.InvoicingProject x x x x x self.project IN (SELECT p FROM Project p WHERE ? MEMBER OF p.membersUserSet) __user__ role.customer

View File

@ -0,0 +1,2 @@
"name";"description"
"role.customer";
1 name description
2 role.customer

View File

@ -0,0 +1,2 @@
"name";"code";"installOrder";"description";"imagePath";"modules";"dependsOn";"sequence"
"Business Support";"business-support";33;"axelor-business-support";;"axelor-business-support";"business-project";15
1 name code installOrder description imagePath modules dependsOn sequence
2 Business Support business-support 33 axelor-business-support axelor-business-support business-project 15

View File

@ -0,0 +1,5 @@
"name";"roles.name"
"project-task-customer";"role.customer"
"project-versions";"Admin"
"project-announcement";"Admin"
"business-project-root-invoicing-project";"role.customer"
1 name roles.name
2 project-task-customer role.customer
3 project-versions Admin
4 project-announcement Admin
5 business-project-root-invoicing-project role.customer

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="base" package="com.axelor.apps.base.db"/>
<entity name="AppBusinessSupport" lang="java" extends="App">
<many-to-one name="providerCompany" title="Provider Company" ref="com.axelor.apps.base.db.Company"/>
</entity>
</domain-models>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module package="com.axelor.apps.project.db" name="project"/>
<entity name="Project">
<one-to-many name="announcementList" ref="com.axelor.apps.businesssupport.db.ProjectAnnouncement" title="Announcement" mappedBy="project"/>
<one-to-many name="roadmapList" ref="com.axelor.apps.businesssupport.db.ProjectVersion" title="Project.version" mappedBy="project"/>
</entity>
</domain-models>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" ?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="business-support" package="com.axelor.apps.businesssupport.db"/>
<entity name="ProjectAnnouncement">
<string name="title" title="Title"/>
<many-to-one name="project" ref="com.axelor.apps.project.db.Project" title="Project"/>
<date name="date" column="date_val"/>
<string name="content" large="true" title="Content"/>
</entity>
</domain-models>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" ?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="business-support" package="com.axelor.apps.businesssupport.db"/>
<entity name="ProjectVersion">
<string name="title" title="Title" namecolumn="true"/>
<many-to-one name="project" title="Project" ref="com.axelor.apps.project.db.Project"/>
<integer name="statusSelect" title="Status" selection="support.project.version.status.select"/>
<date name="testingServerDate" title="Testing server date"/>
<date name="productionServerDate" title="Production server date"/>
<string name="content" title="Content" large="true"/>
<extra-code>
<![CDATA[
public static final Integer STATUS_ON_HOLD = 1;
public static final Integer STATUS_IN_PROGRESS = 2;
public static final Integer STATUS_IN_TEST = 3;
public static final Integer STATUS_IN_PRODUCTION = 4;
]]>
</extra-code>
</entity>
</domain-models>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" ?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="project" package="com.axelor.apps.project.db"/>
<entity name="TaskTemplate">
<string name="internalDescription" title="Internal Description" large="true" multiline="true"/>
</entity>
</domain-models>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module package="com.axelor.team.db" name="project"/>
<entity name="TeamTask">
<integer name="assignment" title="Assignment" selection="support.assignment.select"/>
<boolean name="isPrivate" title="Private" />
<boolean name="isOrderAccepted" title="Order Accepted"/>
<string name="internalDescription" title="Internal Description" large="true" multiline="true"/>
<many-to-one name="targetVersion" title="Target version" ref="com.axelor.apps.businesssupport.db.ProjectVersion"/>
<boolean name="isOrderProposed" title="Order Proposed"/>
<extra-code>
<![CDATA[
// ASSIGNMENT
public static final int ASSIGNMENT_CUSTOMER = 1;
public static final int ASSIGNMENT_PROVIDER = 2;
]]>
</extra-code>
<track>
<field name="isOrderAccepted"/>
<field name="assignment"/>
<field name="targetVersion"/>
</track>
</entity>
</domain-models>

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept Order",,,
"All open ticket",,,
"All tickets",,,
"Announcement",,,
"App Business Support",,,
"Assigning to the customer",,,
"Assigning to the provider",,,
"Assignment",,,
"Characteristics",,,
"Configuration",,,
"Content",,,
"Customer",,,
"Date",,,
"Financial Data",,,
"In production",,,
"In progress",,,
"In test",,,
"Internal Description",,,
"My Tickets",,,
"New Ticket",,,
"New tasks",,,
"On hold",,,
"Order Accepted",,,
"Order Proposed",,,
"Private",,,
"Production server date",,,
"Project",,,
"Project.version",,,
"Provider",,,
"Provider Company",,,
"Status",,,
"Subject",,,
"Target version",,,
"Task Tree",,,
"Task assigned to",,,
"Task assigned to the client",,,
"Task assigned to the provider",,,
"Task date",,,
"Tasks",,,
"Tasks to be treated by customer",,,
"Tasks to be treated by provider",,,
"Testing server date",,,
"Ticket",,,
"Ticket associated",,,
"Tickets",,,
"Title",,,
"Tree view",,,
"Update to invoice",,,
"Validated Timesheet lines",,,
1 key message comment context
2 Accept Order
3 All open ticket
4 All tickets
5 Announcement
6 App Business Support
7 Assigning to the customer
8 Assigning to the provider
9 Assignment
10 Characteristics
11 Configuration
12 Content
13 Customer
14 Date
15 Financial Data
16 In production
17 In progress
18 In test
19 Internal Description
20 My Tickets
21 New Ticket
22 New tasks
23 On hold
24 Order Accepted
25 Order Proposed
26 Private
27 Production server date
28 Project
29 Project.version
30 Provider
31 Provider Company
32 Status
33 Subject
34 Target version
35 Task Tree
36 Task assigned to
37 Task assigned to the client
38 Task assigned to the provider
39 Task date
40 Tasks
41 Tasks to be treated by customer
42 Tasks to be treated by provider
43 Testing server date
44 Ticket
45 Ticket associated
46 Tickets
47 Title
48 Tree view
49 Update to invoice
50 Validated Timesheet lines

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept Order",,,
"All open ticket",,,
"All tickets",,,
"Announcement",,,
"App Business Support",,,
"Assigning to the customer",,,
"Assigning to the provider",,,
"Assignment",,,
"Characteristics",,,
"Configuration",,,
"Content",,,
"Customer",,,
"Date",,,
"Financial Data",,,
"In production",,,
"In progress",,,
"In test",,,
"Internal Description",,,
"My Tickets",,,
"New Ticket",,,
"New tasks",,,
"On hold",,,
"Order Accepted",,,
"Order Proposed",,,
"Private",,,
"Production server date",,,
"Project",,,
"Project.version","Version",,
"Provider",,,
"Provider Company",,,
"Status",,,
"Subject",,,
"Target version",,,
"Task Tree",,,
"Task assigned to",,,
"Task assigned to the client",,,
"Task assigned to the provider",,,
"Task date",,,
"Tasks",,,
"Tasks to be treated by customer",,,
"Tasks to be treated by provider",,,
"Testing server date",,,
"Ticket",,,
"Ticket associated",,,
"Tickets",,,
"Title",,,
"Tree view",,,
"Update to invoice",,,
"Validated Timesheet lines",,,
1 key message comment context
2 Accept Order
3 All open ticket
4 All tickets
5 Announcement
6 App Business Support
7 Assigning to the customer
8 Assigning to the provider
9 Assignment
10 Characteristics
11 Configuration
12 Content
13 Customer
14 Date
15 Financial Data
16 In production
17 In progress
18 In test
19 Internal Description
20 My Tickets
21 New Ticket
22 New tasks
23 On hold
24 Order Accepted
25 Order Proposed
26 Private
27 Production server date
28 Project
29 Project.version Version
30 Provider
31 Provider Company
32 Status
33 Subject
34 Target version
35 Task Tree
36 Task assigned to
37 Task assigned to the client
38 Task assigned to the provider
39 Task date
40 Tasks
41 Tasks to be treated by customer
42 Tasks to be treated by provider
43 Testing server date
44 Ticket
45 Ticket associated
46 Tickets
47 Title
48 Tree view
49 Update to invoice
50 Validated Timesheet lines

View File

@ -0,0 +1,50 @@
"key","message","comment","context"
"Accept Order",,,
"All open ticket","Tous les tickets ouverts",,
"All tickets","Historiques des tickets",,
"Announcement","Annonce",,
"App Business Support",,,
"Assigning to the customer",,,
"Assigning to the provider",,,
"Assignment","Affectation",,
"Characteristics",,,
"Configuration",,,
"Content","Contenu",,
"Customer","Client",,
"Date","Date",,
"Financial Data",,,
"In production","En production",,
"In progress","en cours",,
"In test","En recette",,
"Internal Description","Description interne",,
"My Tickets","Mes Tickets",,
"New Ticket","Nouveau Ticket",,
"New tasks","Nouvelles tâches",,
"On hold","En attente",,
"Order Accepted","Devis accepté",,
"Order Proposed","Devis proposé",,
"Private","Privé",,
"Production server date","Date de mise en production",,
"Project",,,
"Project.version","Version",,
"Provider","Prestataire",,
"Provider Company","Prestataire",,
"Status",,,
"Subject",,,
"Target version","Version cible",,
"Task Tree",,,
"Task assigned to",,,
"Task assigned to the client",,,
"Task assigned to the provider",,,
"Task date",,,
"Tasks","Les Tâches",,
"Tasks to be treated by customer","Tickets à traiter Client",,
"Tasks to be treated by provider","Tickets à traiter Prestataire",,
"Testing server date","Date de mise en recette",,
"Ticket",,,
"Ticket associated",,,
"Tickets",,,
"Title","Titre",,
"Tree view",,,
"Update to invoice",,,
"Validated Timesheet lines",,,
1 key message comment context
2 Accept Order
3 All open ticket Tous les tickets ouverts
4 All tickets Historiques des tickets
5 Announcement Annonce
6 App Business Support
7 Assigning to the customer
8 Assigning to the provider
9 Assignment Affectation
10 Characteristics
11 Configuration
12 Content Contenu
13 Customer Client
14 Date Date
15 Financial Data
16 In production En production
17 In progress en cours
18 In test En recette
19 Internal Description Description interne
20 My Tickets Mes Tickets
21 New Ticket Nouveau Ticket
22 New tasks Nouvelles tâches
23 On hold En attente
24 Order Accepted Devis accepté
25 Order Proposed Devis proposé
26 Private Privé
27 Production server date Date de mise en production
28 Project
29 Project.version Version
30 Provider Prestataire
31 Provider Company Prestataire
32 Status
33 Subject
34 Target version Version cible
35 Task Tree
36 Task assigned to
37 Task assigned to the client
38 Task assigned to the provider
39 Task date
40 Tasks Les Tâches
41 Tasks to be treated by customer Tickets à traiter Client
42 Tasks to be treated by provider Tickets à traiter Prestataire
43 Testing server date Date de mise en recette
44 Ticket
45 Ticket associated
46 Tickets
47 Title Titre
48 Tree view
49 Update to invoice
50 Validated Timesheet lines

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<form name="app-business-support-config-form" title="App Business Support" model="com.axelor.apps.base.db.AppBusinessSupport" canDelete="false" canNew="false" width="large">
<panel name="mainPanel" title="Configuration">
<field name="providerCompany" form-view="company-form" grid-view="company-grid"/>
</panel>
</form>
</object-views>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<menuitem name="project-announcement" title="Announcement" order="37" parent="menu-project-root" action="project.announcement" if="__config__.app.isApp('business-support')"/>
<action-view name="project.announcement" title="Announcement" model="com.axelor.apps.businesssupport.db.ProjectAnnouncement">
<view type="grid" name="project-announcement-grid" />
<view type="form" name="project-announcement-form" />
</action-view>
<menuitem title="Project.version" name="project-versions" parent="menu-project-root" action="action.project.version.view.all.versions" order="36" if="__config__.app.isApp('business-support')"/>
<action-view name="action.project.version.view.all.versions" title="Project.version" model="com.axelor.apps.businesssupport.db.ProjectVersion">
<view type="grid" name="project-version-grid"/>
<view type="form" name="project-version-form"/>
</action-view>
<menuitem name="project-task-customer" title="Tickets" order="-102" if="__config__.app.isApp('business-support')" icon="fa-tasks" icon-background="#3f6bb9"/>
<menuitem name="project-task-customer-my-task" title="My Tickets" parent="project-task-customer" action="project.task.customer.my.task" order="1"/>
<action-view name="project.task.customer.my.task" title="My Tickets" model="com.axelor.team.db.TeamTask">
<view type="grid" name="team-task-client-grid"/>
<view type="form" name="team-task-client-form"/>
<domain>self.customerReferral = :user AND self.isPrivate = false AND self.typeSelect = 'ticket'</domain>
<context name="user" expr="eval: __user__"/>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
<menuitem name="project-task-customer-new" title="New Ticket" parent="project-task-customer" action="project.task.customer.new" order="2"/>
<action-view name="project.task.customer.new" title="New tasks" model="com.axelor.team.db.TeamTask">
<view type="form" name="team-task-client-form"/>
<domain>self.typeSelect = 'ticket'</domain>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
<menuitem name="project-task-customer-treated-by-customer" title="Tasks to be treated by customer" parent="project-task-customer"
action="project.task.customer.treated.by.customer" order="3"/>
<action-view name="project.task.customer.treated.by.customer" title="Tasks to be treated by customer" model="com.axelor.team.db.TeamTask">
<view type="grid" name="team-task-client-grid"/>
<view type="form" name="team-task-client-form"/>
<domain>self.status IN :statusCustomer AND self.isPrivate = false AND self.assignment = 1 AND self.typeSelect = 'ticket'</domain>
<context name="statusCustomer" expr="#{['new', 'in-progress']}"/>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
<menuitem name="project-task-customer-treated-by-provider" title="Tasks to be treated by provider" parent="project-task-customer"
action="project.task.customer.treated.by.provider" order="4"/>
<action-view name="project.task.customer.treated.by.provider" title="Tasks to be treated by provider" model="com.axelor.team.db.TeamTask">
<view type="grid" name="team-task-client-grid"/>
<view type="form" name="team-task-client-form"/>
<domain>self.status IN :statusProvider AND self.isPrivate = false AND self.assignment = 2 AND self.typeSelect = 'ticket'</domain>
<context name="statusProvider" expr="#{['new', 'in-progress']}"/>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
<menuitem name="project-task-customer-open-all" title="All open ticket" parent="project-task-customer"
action="project.task.customer.open.all" order="5"/>
<action-view name="project.task.customer.open.all" title="All open ticket" model="com.axelor.team.db.TeamTask">
<view type="grid" name="team-task-client-grid"/>
<view type="form" name="team-task-client-form"/>
<domain>self.status IN :status_open AND self.isPrivate = false AND self.typeSelect = 'ticket'</domain>
<context name="status_open" expr="#{['new', 'in-progress']}"/>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
<menuitem name="project-task-customer-all" title="All tickets" parent="project-task-customer"
action="project.task.customer.all" order="6"/>
<action-view name="project.task.customer.all" title="All tickets" model="com.axelor.team.db.TeamTask">
<view type="grid" name="team-task-client-grid"/>
<view type="form" name="team-task-client-form"/>
<domain>self.isPrivate = false AND self.typeSelect = 'ticket'</domain>
<context name="_typeSelect" expr="eval: com.axelor.team.db.repo.TeamTaskRepository.TYPE_TICKET"/>
</action-view>
</object-views>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="project-announcement-grid" title="Announcement" model="com.axelor.apps.businesssupport.db.ProjectAnnouncement">
<field name="title"/>
<field name="project"/>
<field name="content"/>
<field name="date"/>
</grid>
<form name="project-announcement-form" title="Announcement"
model="com.axelor.apps.businesssupport.db.ProjectAnnouncement" width="large"
onNew="action-project-record-project-announcement-onnew,action-business-support-attrs-project-default">
<panel name="mainPanel">
<field name="title" colSpan="12"/>
<field name="project" form-view="project-form" grid-view="project-grid" onSelect="action-project-attrs-project-announcement-project-domain"/>
<field name="date"/>
<field name="content" widget="html" colSpan="12"/>
</panel>
</form>
<action-attrs name="action-project-attrs-project-announcement-project-domain" >
<attribute name="domain" for="project" expr="eval: &quot; ${__user__.id} MEMBER OF self.membersUserSet &quot;"/>
</action-attrs>
<action-record name="action-project-record-project-announcement-onnew" model="com.axelor.apps.businesssupport.db.ProjectAnnouncement">
<field name="date" expr="eval: __date__"/>
</action-record>
</object-views>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="project-version-grid" title="Project.version" model="com.axelor.apps.businesssupport.db.ProjectVersion">
<field name="title"/>
<field name="project"/>
<field name="statusSelect"/>
<field name="testingServerDate"/>
</grid>
<form name="project-version-form" title="Project.version" model="com.axelor.apps.businesssupport.db.ProjectVersion" width="large" onNew="action-business-support-attrs-project-default">
<panel name="mainPanel">
<field name="title" colSpan="12"/>
<field name="project" grid-view="project-grid" form-view="project-form" onSelect="action-version-attrs-project-domain"/>
<field name="statusSelect"/>
<field name="testingServerDate"/>
<field name="productionServerDate"/>
<field name="content" widget="HTML" colSpan="12"/>
</panel>
<panel if="__config__.app.isApp('business-project')" if-module="axelor-business-project">
<panel-dashlet name="taskDashletPanel" title="Ticket associated" action="action-dashlet-version-view-show-task" colSpan="12"/>
</panel>
</form>
<action-attrs name="action-version-attrs-project-domain">
<attribute name="domain" for="project" expr="eval: &quot; ${__user__.id} MEMBER OF self.membersUserSet &quot;"/>
</action-attrs>
</object-views>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<selection name="support.assignment.select">
<option value="1">Customer</option>
<option value="2">Provider</option>
</selection>
<selection name="support.project.version.status.select">
<option value="1">On hold</option>
<option value="2">In progress</option>
<option value="3">In test</option>
<option value="4">In production</option>
</selection>
</object-views>

View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid model="com.axelor.team.db.TeamTask" title="Tasks" name="business-support-version-team-task-grid" orderBy="-taskDate">
<field name="name"/>
<field name="taskDate"/>
<field name="status"/>
<field name="progressSelect" widget="SelectProgress"/>
<field name="projInvTypeSelect"/>
<button name="updateToInvoiceBtn" title="Update to invoice" readonlyIf="invoiced" icon="fa-check-circle" onClick="action-team-task-method-update-to-invoice"/>
</grid>
<grid name="team-task-client-grid" title="Tasks" model="com.axelor.team.db.TeamTask" edit-icon="true" orderBy="taskDate">
<hilite if="status == 'closed'" color="success"/>
<hilite if="$moment(taskEndDate).diff(todayDate,'days') &lt; 0" color="danger"/>
<hilite if="priority == 'urgent'" color="warning"/>
<field name="name"/>
<field name="taskDate"/>
<field name="taskEndDate" hidden="true"/>
<field name="status"/>
<field name="teamTaskCategory"/>
<field name="customerReferral"/>
<field name="targetVersion"/>
</grid>
<form name="team-task-client-form" title="Ticket" model="com.axelor.team.db.TeamTask"
onNew="action-team-task-group-onnew" onLoad="action-team-task-group-timer-process" width="large">
<panel name="mainPanel">
<panel name="statusSelectPanel" colSpan="8">
<field name="status" colSpan="12" required="true" widget="NavSelect" readonly="true" showTitle="false"/>
</panel>
<field name="$viewerTags" showTitle="false" readonly="true" showIf="typeSelect == 'ticket' &amp;&amp; $readonly()" colSpan="4" hidden="true">
<viewer>
<![CDATA[
<h4 class="text-right">
<span class="label label-important" ng-show="record.assignment == 1" x-translate>Task assigned to the client</span>
<span class="label label-success" ng-show="record.assignment == 2 && record.$provider == null" x-translate>Task assigned to the provider</span>
<span class="label label-success" style="background-color: #5cb85c; margin: 5px 0 !important; display: inline-table; line-height: initial; border-top-right-radius: 0; border-bottom-right-radius: 0; padding-right: 0.3em;" ng-show="record.assignment == 2 && record.$provider != null" x-translate>Task assigned to</span><span class="label label-success" style="background-color: #5cb85c; margin: 5px 0 !important; display: inline-table; line-height: initial; border-top-left-radius: 0; border-bottom-left-radius: 0; padding-left: 0.0em;" ng-show="record.assignment == 2 && record.$provider != null">{{record.$provider}}</span>
<span class="label label-important" ng-show="(!record.isOrderAccepted && record.invoicingType == 2 && record.exTaxTotal != 0) || (!record.isOrderAccepted && record.invoicingType == 1)" x-translate>Order Proposed</span>
<span class="label label-success" ng-show="record.isOrderAccepted" x-translate>Order Accepted</span>
</h4>
]]>
</viewer>
</field>
<field name="$provider" hidden="true" type="string"/>
<panel name="detailsPanel" colSpan="8" readonlyIf="id">
<field name="fullName" showTitle="false" colSpan="12">
<viewer depends="name">
<![CDATA[
<h3>
<span style="margin: 5px 0 !important; display: inline-table; line-height: initial;">{{record.name}}</span>
</h3>
]]>
</viewer>
<editor>
<field name="name" title="Subject" colSpan="12" css="label-bold bold large" required="true"/>
</editor>
</field>
<field name="project" canEdit="false" onChange="action-team-task-group-project-onchange" required="true"/>
<field name="parentTask" readonlyIf="project == null" onSelect="action-task-attrs-project-parent-task-configurations"/>
<field name="isOrderAccepted" hidden="true" showIf="typeSelect == 'ticket'"/>
<field name="isOrderProposed" hidden="true"/>
</panel>
<panel name="actionsPanel" colSpan="4">
<button name="acceptOrderBtn" title="Accept Order" hidden="true" showIf="typeSelect == 'ticket'" hideIf="!invoicingType || isOrderAccepted" onClick="action-task-attrs-onclick-order-accepted,save" colSpan="12"/>
<button name="assigningProviderBtn" colSpan="12" title="Assigning to the provider" hidden="true" onClick="action-team-task-attrs-assginment-provider,save" showIf="assignment == 1 &amp;&amp; typeSelect == 'ticket'"/>
<button name="assigningCustomerBtn" colSpan="12" title="Assigning to the customer" hidden="true" onClick="action-team-task-attrs-assginment-customer,save" showIf="assignment == 2 &amp;&amp; typeSelect == 'ticket'"/>
</panel>
<panel name="characteristicsPanel" title="Characteristics" colSpan="12">
<field name="taskDate" title="Task date" onChange="action-task-attrs-set-task-duration" required="true" readonlyIf="id"/>
<field name="teamTaskCategory" onSelect="action-task-attrs-team-task-category-configurations" readonlyIf="id"/>
<field name="targetVersion" domain="self.project = :project OR self.project.parentProject = :project" form-view="project-version-form" grid-view="project-version-grid" readonlyIf="id"/>
<field name="customerReferral" hidden="true" showIf="typeSelect == 'ticket'" onSelect="action-task-attrs-customer-referral-domain" if="__config__.app.isApp('business-project')"/>
<field name="progressSelect" colSpan="6" widget="SelectProgress" onChange="action-task-update-planned-progress" readonlyIf="id"/>
<field name="assignment" hidden="true" readonlyIf="id" showIf="typeSelect == 'ticket'"/>
</panel>
</panel>
<panel-tabs name="mainPanelTab" readonlyIf="id">
<panel name="contentPanel" title="Content" colSpan="12">
<field name="description" showTitle="false" colSpan="12" widget="html"/>
</panel>
<panel name="treeViewPanel" title="Tree view" colSpan="12">
<panel-dashlet name="taskTreePanel" title="Task Tree" colSpan="12" action="action-view-show-task-tree"/>
<panel-related name="finishToStartSetPanel" field="finishToStartSet" colSpan="12">
<field name="name"/>
</panel-related>
</panel>
<panel name="financialDataPanel" title="Financial Data" colSpan="12">
<field name="invoicingType" if="__config__.app.isApp('business-project')" if-module="axelor-business-project" />
<panel name="pricingPanel" showIf="invoicingType == 2" colSpan="12">
<field name="quantity" colSpan="4" onChange="action-team-task-group-qty-onchange"/>
<field name="unit" colSpan="4" domain="self.unitTypeSelect=3" form-view="unit-form" grid-view="unit-grid" canEdit="false"/>
<field name="unitPrice" colSpan="4" onChange="action-team-task-group-unit-price-onchange"/>
<field name="exTaxTotal" readonly="true" colSpan="4"/>
</panel>
<panel-dashlet name="validatedTimesheetLinesPanel" showIf="invoicingType == 1" action="action-teamtask-dashlet-validated-timeshet-lines" title="Validated Timesheet lines" colSpan="12" canSearch="true" readonly="true"/>
</panel>
</panel-tabs>
<panel-mail name="mailPanel">
<mail-messages/>
<mail-followers/>
</panel-mail>
</form>
<action-view name="action-dashlet-version-view-show-task" title="Ticket associated" model="com.axelor.team.db.TeamTask">
<view type="grid" name="business-support-version-team-task-grid"/>
<view type="form" name="team-task-form"/>
<view-param name="popup" value="true"/>
<domain>self.targetVersion.id = :id</domain>
</action-view>
</object-views>