First commit waiting for Budget Alert
This commit is contained in:
@ -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")
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
@ -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"
|
||||
|
@ -0,0 +1,2 @@
|
||||
"name";"description"
|
||||
"role.customer";
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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",,,
|
||||
|
@ -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",,,
|
||||
|
@ -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",,,
|
||||
|
@ -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>
|
||||
@ -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>
|
||||
|
||||
@ -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: " ${__user__.id} MEMBER OF self.membersUserSet ""/>
|
||||
</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>
|
||||
@ -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: " ${__user__.id} MEMBER OF self.membersUserSet ""/>
|
||||
</action-attrs>
|
||||
|
||||
</object-views>
|
||||
@ -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>
|
||||
@ -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') < 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' && $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 && 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 && 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>
|
||||
Reference in New Issue
Block a user