First commit waiting for Budget Alert
This commit is contained in:
18
modules/axelor-open-suite/axelor-client-portal/build.gradle
Normal file
18
modules/axelor-open-suite/axelor-client-portal/build.gradle
Normal file
@ -0,0 +1,18 @@
|
||||
apply plugin: "com.axelor.app-module"
|
||||
|
||||
apply from: "../version.gradle"
|
||||
|
||||
apply {
|
||||
version = openSuiteVersion
|
||||
}
|
||||
|
||||
axelor {
|
||||
title "Axelor Client Portal"
|
||||
description "Axelor Client Portal Module"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(":modules:axelor-supplychain")
|
||||
compile project(":modules:axelor-helpdesk")
|
||||
compile project(":modules:axelor-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.portal.module;
|
||||
|
||||
import com.axelor.app.AxelorModule;
|
||||
import com.axelor.apps.portal.service.ClientViewService;
|
||||
import com.axelor.apps.portal.service.ClientViewServiceImpl;
|
||||
|
||||
public class ClientPortalModule extends AxelorModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ClientViewService.class).to(ClientViewServiceImpl.class);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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.portal.service;
|
||||
|
||||
import com.axelor.auth.db.User;
|
||||
import java.util.Map;
|
||||
|
||||
public interface ClientViewService {
|
||||
|
||||
public User getClientUser();
|
||||
|
||||
public Map<String, Object> updateClientViewIndicators();
|
||||
|
||||
/* Project */
|
||||
public String getTotalProjectsOfUser(User user);
|
||||
|
||||
public String getNewTasksOfUser(User user);
|
||||
|
||||
public String getTasksInProgressOfUser(User user);
|
||||
|
||||
public String getTasksDueOfUser(User user);
|
||||
|
||||
/* SaleOrder */
|
||||
public String getOrdersInProgressOfUser(User user);
|
||||
|
||||
public String getQuotationsOfUser(User user);
|
||||
|
||||
public String getLastOrderOfUser(User user);
|
||||
|
||||
/* StockMove */
|
||||
public String getLastDeliveryOfUser(User user);
|
||||
|
||||
public String getNextDeliveryOfUser(User user);
|
||||
|
||||
public String getPlannedDeliveriesOfUser(User user);
|
||||
|
||||
public String getReversionsOfUser(User user);
|
||||
|
||||
/* Invoice */
|
||||
public String getOverdueInvoicesOfUser(User user);
|
||||
|
||||
public String getAwaitingInvoicesOfUser(User user);
|
||||
|
||||
public String getTotalRemainingOfUser(User user);
|
||||
|
||||
public String getRefundOfUser(User user);
|
||||
|
||||
/* Ticket */
|
||||
public String getTicketsOfUser(User user);
|
||||
|
||||
public String getCompanyTicketsOfUser(User user);
|
||||
|
||||
public String getResolvedTicketsOfUser(User user);
|
||||
|
||||
public String getLateTicketsOfUser(User user);
|
||||
}
|
||||
@ -0,0 +1,501 @@
|
||||
/*
|
||||
* 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.portal.service;
|
||||
|
||||
import com.axelor.apps.account.db.Invoice;
|
||||
import com.axelor.apps.account.db.repo.InvoiceRepository;
|
||||
import com.axelor.apps.base.service.user.UserService;
|
||||
import com.axelor.apps.helpdesk.db.Ticket;
|
||||
import com.axelor.apps.helpdesk.db.repo.TicketRepository;
|
||||
import com.axelor.apps.project.db.Project;
|
||||
import com.axelor.apps.project.db.repo.ProjectRepository;
|
||||
import com.axelor.apps.sale.db.SaleOrder;
|
||||
import com.axelor.apps.sale.db.repo.SaleOrderRepository;
|
||||
import com.axelor.apps.stock.db.StockMove;
|
||||
import com.axelor.apps.stock.db.repo.StockMoveRepository;
|
||||
import com.axelor.auth.db.User;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
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.format.DateTimeFormatter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ClientViewServiceImpl implements ClientViewService {
|
||||
|
||||
protected SaleOrderRepository saleOrderRepo;
|
||||
protected StockMoveRepository stockMoveRepo;
|
||||
protected ProjectRepository projectRepo;
|
||||
protected TicketRepository ticketRepo;
|
||||
protected InvoiceRepository invoiceRepo;
|
||||
protected TeamTaskRepository teamTaskRepo;
|
||||
|
||||
protected static final DateTimeFormatter DATE_FORMATTER =
|
||||
DateTimeFormatter.ofPattern("dd/MM/yyyy");
|
||||
|
||||
static final String CLIENT_PORTAL_NO_DATE = /*$$(*/ "None" /*)*/;
|
||||
|
||||
@Inject
|
||||
public ClientViewServiceImpl(
|
||||
SaleOrderRepository saleOrderRepo,
|
||||
StockMoveRepository stockMoveRepo,
|
||||
ProjectRepository projectRepo,
|
||||
TicketRepository ticketRepo,
|
||||
InvoiceRepository invoiceRepo,
|
||||
TeamTaskRepository teamTaskRepo) {
|
||||
this.saleOrderRepo = saleOrderRepo;
|
||||
this.stockMoveRepo = stockMoveRepo;
|
||||
this.projectRepo = projectRepo;
|
||||
this.ticketRepo = ticketRepo;
|
||||
this.invoiceRepo = invoiceRepo;
|
||||
this.teamTaskRepo = teamTaskRepo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getClientUser() {
|
||||
return Beans.get(UserService.class).getUser();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> updateClientViewIndicators() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
User user = getClientUser();
|
||||
/* SaleOrder */
|
||||
map.put("$ordersInProgress", getOrdersInProgressIndicator(user));
|
||||
map.put("$myQuotation", getQuotationsIndicator(user));
|
||||
map.put("$lastOrder", getLastOrderIndicator(user));
|
||||
/* StockMove */
|
||||
map.put("$lastDelivery", getLastDeliveryIndicator(user));
|
||||
map.put("$nextDelivery", getNextDeliveryIndicator(user));
|
||||
map.put("$plannedDeliveries", getPlannedDeliveriesIndicator(user));
|
||||
map.put("$myReversions", getReversionsIndicator(user));
|
||||
/* Invoice */
|
||||
map.put("$overdueInvoices", getOverdueInvoicesIndicator(user));
|
||||
map.put("$awaitingInvoices", getAwaitingInvoicesIndicator(user));
|
||||
map.put("$totalRemaining", getTotalRemainingIndicator(user));
|
||||
map.put("$myRefund", getRefundIndicator(user));
|
||||
/* Helpdesk */
|
||||
map.put("$customerTickets", getCustomerTicketsIndicator(user));
|
||||
map.put("$companyTickets", getCompanyTicketsIndicator(user));
|
||||
map.put("$resolvedTickets", getResolvedTicketsIndicator(user));
|
||||
map.put("$lateTickets", getLateTicketsIndicator(user));
|
||||
/* Project */
|
||||
map.put("$totalProjects", getTotalProjectsIndicator(user));
|
||||
map.put("$newTasks", getNewTasksIndicator(user));
|
||||
map.put("$tasksInProgress", getTasksInProgressIndicator(user));
|
||||
map.put("$tasksDue", getTasksDueIndicator(user));
|
||||
return map;
|
||||
}
|
||||
|
||||
/* SaleOrder Indicators */
|
||||
protected Integer getOrdersInProgressIndicator(User user) {
|
||||
List<SaleOrder> saleOrderList =
|
||||
saleOrderRepo.all().filter(getOrdersInProgressOfUser(user)).fetch();
|
||||
return !saleOrderList.isEmpty() ? saleOrderList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getQuotationsIndicator(User user) {
|
||||
List<SaleOrder> saleOrderList = saleOrderRepo.all().filter(getQuotationsOfUser(user)).fetch();
|
||||
return !saleOrderList.isEmpty() ? saleOrderList.size() : 0;
|
||||
}
|
||||
|
||||
protected String getLastOrderIndicator(User user) {
|
||||
SaleOrder saleOrder = saleOrderRepo.all().filter(getLastOrderOfUser(user)).fetchOne();
|
||||
if (saleOrder == null) {
|
||||
return I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
return saleOrder.getConfirmationDateTime() != null
|
||||
? saleOrder.getConfirmationDateTime().format(DATE_FORMATTER)
|
||||
: I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
|
||||
/* StockMove Indicators */
|
||||
protected String getLastDeliveryIndicator(User user) {
|
||||
StockMove stockMove = stockMoveRepo.all().filter(getLastDeliveryOfUser(user)).fetchOne();
|
||||
if (stockMove == null) {
|
||||
return I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
return stockMove.getRealDate() != null
|
||||
? stockMove.getRealDate().format(DATE_FORMATTER)
|
||||
: I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
|
||||
protected String getNextDeliveryIndicator(User user) {
|
||||
StockMove stockMove = stockMoveRepo.all().filter(getNextDeliveryOfUser(user)).fetchOne();
|
||||
if (stockMove == null) {
|
||||
return I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
return stockMove.getEstimatedDate() != null
|
||||
? stockMove.getEstimatedDate().format(DATE_FORMATTER)
|
||||
: I18n.get(CLIENT_PORTAL_NO_DATE);
|
||||
}
|
||||
|
||||
protected Integer getPlannedDeliveriesIndicator(User user) {
|
||||
List<StockMove> stockMoveList =
|
||||
stockMoveRepo.all().filter(getPlannedDeliveriesOfUser(user)).fetch();
|
||||
return !stockMoveList.isEmpty() ? stockMoveList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getReversionsIndicator(User user) {
|
||||
List<StockMove> stockMoveList = stockMoveRepo.all().filter(getReversionsOfUser(user)).fetch();
|
||||
return !stockMoveList.isEmpty() ? stockMoveList.size() : 0;
|
||||
}
|
||||
|
||||
/* Invoice Indicators */
|
||||
protected Integer getOverdueInvoicesIndicator(User user) {
|
||||
List<Invoice> invoiceList = invoiceRepo.all().filter(getOverdueInvoicesOfUser(user)).fetch();
|
||||
return !invoiceList.isEmpty() ? invoiceList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getAwaitingInvoicesIndicator(User user) {
|
||||
List<Invoice> invoiceList = invoiceRepo.all().filter(getAwaitingInvoicesOfUser(user)).fetch();
|
||||
return !invoiceList.isEmpty() ? invoiceList.size() : 0;
|
||||
}
|
||||
|
||||
protected String getTotalRemainingIndicator(User user) {
|
||||
List<Invoice> invoiceList = invoiceRepo.all().filter(getTotalRemainingOfUser(user)).fetch();
|
||||
if (!invoiceList.isEmpty()) {
|
||||
BigDecimal total =
|
||||
invoiceList
|
||||
.stream()
|
||||
.map(Invoice::getAmountRemaining)
|
||||
.reduce((x, y) -> x.add(y))
|
||||
.orElse(BigDecimal.ZERO);
|
||||
return total.toString() + invoiceList.get(0).getCurrency().getSymbol();
|
||||
}
|
||||
return BigDecimal.ZERO.toString();
|
||||
}
|
||||
|
||||
protected Integer getRefundIndicator(User user) {
|
||||
List<Invoice> invoiceList = invoiceRepo.all().filter(getRefundOfUser(user)).fetch();
|
||||
return !invoiceList.isEmpty() ? invoiceList.size() : 0;
|
||||
}
|
||||
|
||||
/* Helpdesk Indicators */
|
||||
protected Integer getCustomerTicketsIndicator(User user) {
|
||||
List<Ticket> ticketList = ticketRepo.all().filter(getTicketsOfUser(user)).fetch();
|
||||
return !ticketList.isEmpty() ? ticketList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getCompanyTicketsIndicator(User user) {
|
||||
List<Ticket> ticketList = ticketRepo.all().filter(getCompanyTicketsOfUser(user)).fetch();
|
||||
return !ticketList.isEmpty() ? ticketList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getResolvedTicketsIndicator(User user) {
|
||||
List<Ticket> ticketList = ticketRepo.all().filter(getResolvedTicketsOfUser(user)).fetch();
|
||||
return !ticketList.isEmpty() ? ticketList.size() : 0;
|
||||
}
|
||||
|
||||
protected Object getLateTicketsIndicator(User user) {
|
||||
List<Ticket> ticketList = ticketRepo.all().filter(getLateTicketsOfUser(user)).fetch();
|
||||
return !ticketList.isEmpty() ? ticketList.size() : 0;
|
||||
}
|
||||
|
||||
/* Project Indicators */
|
||||
protected Integer getTotalProjectsIndicator(User user) {
|
||||
List<Project> projectList = projectRepo.all().filter(getTotalProjectsOfUser(user)).fetch();
|
||||
return !projectList.isEmpty() ? projectList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getNewTasksIndicator(User user) {
|
||||
List<TeamTask> teamTaskList = teamTaskRepo.all().filter(getNewTasksOfUser(user)).fetch();
|
||||
return !teamTaskList.isEmpty() ? teamTaskList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getTasksInProgressIndicator(User user) {
|
||||
List<TeamTask> teamTaskList = teamTaskRepo.all().filter(getTasksInProgressOfUser(user)).fetch();
|
||||
return !teamTaskList.isEmpty() ? teamTaskList.size() : 0;
|
||||
}
|
||||
|
||||
protected Integer getTasksDueIndicator(User user) {
|
||||
List<TeamTask> teamTaskList = teamTaskRepo.all().filter(getTasksDueOfUser(user)).fetch();
|
||||
return !teamTaskList.isEmpty() ? teamTaskList.size() : 0;
|
||||
}
|
||||
|
||||
/* SaleOrder Query */
|
||||
@Override
|
||||
public String getOrdersInProgressOfUser(User user) {
|
||||
String query =
|
||||
"self.clientPartner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.statusSelect = "
|
||||
+ SaleOrderRepository.STATUS_ORDER_CONFIRMED;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQuotationsOfUser(User user) {
|
||||
String query =
|
||||
"self.clientPartner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.statusSelect IN ("
|
||||
+ SaleOrderRepository.STATUS_DRAFT_QUOTATION
|
||||
+ ","
|
||||
+ SaleOrderRepository.STATUS_FINALIZED_QUOTATION
|
||||
+ ")";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLastOrderOfUser(User user) {
|
||||
String query =
|
||||
"self.clientPartner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.statusSelect = "
|
||||
+ SaleOrderRepository.STATUS_ORDER_COMPLETED;
|
||||
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
query = query + " ORDER BY self.confirmationDateTime DESC";
|
||||
return query;
|
||||
}
|
||||
|
||||
/* StockMove Query */
|
||||
@Override
|
||||
public String getLastDeliveryOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.typeSelect = "
|
||||
+ StockMoveRepository.TYPE_OUTGOING
|
||||
+ " AND self.statusSelect = "
|
||||
+ StockMoveRepository.STATUS_REALIZED
|
||||
+ " AND self.isReversion != true";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
query = query + " ORDER BY self.realDate DESC";
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNextDeliveryOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.typeSelect = "
|
||||
+ StockMoveRepository.TYPE_OUTGOING
|
||||
+ " AND self.statusSelect = "
|
||||
+ StockMoveRepository.STATUS_PLANNED
|
||||
+ " AND self.isReversion != true";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
query = query + " ORDER BY self.estimatedDate ASC";
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPlannedDeliveriesOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.typeSelect = "
|
||||
+ StockMoveRepository.TYPE_OUTGOING
|
||||
+ " AND self.statusSelect = "
|
||||
+ StockMoveRepository.STATUS_PLANNED
|
||||
+ " AND self.isReversion != true";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReversionsOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.typeSelect = "
|
||||
+ StockMoveRepository.TYPE_OUTGOING
|
||||
+ " AND self.isReversion = true";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
/* Invoice Query */
|
||||
@Override
|
||||
public String getOverdueInvoicesOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.dueDate < current_date() "
|
||||
+ " AND self.amountRemaining != 0 AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_DRAFT
|
||||
+ " AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_CANCELED;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAwaitingInvoicesOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.amountRemaining != 0 AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_DRAFT
|
||||
+ " AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_CANCELED;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTotalRemainingOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.amountRemaining != 0 AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_DRAFT
|
||||
+ " AND self.statusSelect != "
|
||||
+ InvoiceRepository.STATUS_CANCELED;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRefundOfUser(User user) {
|
||||
String query =
|
||||
"self.partner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.operationTypeSelect = "
|
||||
+ InvoiceRepository.OPERATION_TYPE_CLIENT_REFUND;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
/* Helpdesk Query */
|
||||
@Override
|
||||
public String getTicketsOfUser(User user) {
|
||||
return "self.customer.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.assignedToUser.id = "
|
||||
+ user.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCompanyTicketsOfUser(User user) {
|
||||
return "self.customer.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.assignedToUser.id = "
|
||||
+ user.getActiveCompany().getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getResolvedTicketsOfUser(User user) {
|
||||
return "self.customer.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.assignedToUser.id = "
|
||||
+ user.getId()
|
||||
+ " AND self.statusSelect IN ("
|
||||
+ TicketRepository.STATUS_RESOLVED
|
||||
+ ", "
|
||||
+ TicketRepository.STATUS_CLOSED
|
||||
+ ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLateTicketsOfUser(User user) {
|
||||
return "self.customer.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.assignedToUser.id = "
|
||||
+ user.getId()
|
||||
+ " AND ((self.endDateT != null AND self.endDateT > self.deadlineDateT) "
|
||||
+ " OR (self.endDateT = null and self.deadlineDateT < current_date() ) )";
|
||||
}
|
||||
|
||||
/* Project Query */
|
||||
@Override
|
||||
public String getTotalProjectsOfUser(User user) {
|
||||
String query =
|
||||
"self.isProject = true AND self.clientPartner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.statusSelect != "
|
||||
+ ProjectRepository.STATE_CANCELED;
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNewTasksOfUser(User user) {
|
||||
String query =
|
||||
"self.status = 'new' "
|
||||
+ " AND self.typeSelect = '"
|
||||
+ TeamTaskRepository.TYPE_TASK
|
||||
+ "' AND self.project.clientPartner.id = "
|
||||
+ user.getPartner().getId();
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.project.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTasksInProgressOfUser(User user) {
|
||||
String query =
|
||||
"self.status = 'in-progress'"
|
||||
+ " AND self.typeSelect = '"
|
||||
+ TeamTaskRepository.TYPE_TASK
|
||||
+ "' AND self.project.clientPartner.id = "
|
||||
+ user.getPartner().getId();
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.project.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTasksDueOfUser(User user) {
|
||||
String query =
|
||||
"self.status IN ('in-progress','new')"
|
||||
+ " AND self.project.clientPartner.id = "
|
||||
+ user.getPartner().getId()
|
||||
+ " AND self.typeSelect = '"
|
||||
+ TeamTaskRepository.TYPE_TASK
|
||||
+ "' AND self.taskEndDate < current_date() ";
|
||||
if (user.getActiveCompany() != null) {
|
||||
query = query + " AND self.project.company.id = " + user.getActiveCompany().getId();
|
||||
}
|
||||
return query;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* 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.portal.translation;
|
||||
|
||||
public interface ITranslation {
|
||||
|
||||
public static final String PORTAL_APP_NAME = /*$$(*/ "value:Portal"; /*)*/
|
||||
}
|
||||
@ -0,0 +1,386 @@
|
||||
/*
|
||||
* 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.portal.web;
|
||||
|
||||
import com.axelor.apps.account.db.Invoice;
|
||||
import com.axelor.apps.helpdesk.db.Ticket;
|
||||
import com.axelor.apps.portal.service.ClientViewService;
|
||||
import com.axelor.apps.project.db.Project;
|
||||
import com.axelor.apps.sale.db.SaleOrder;
|
||||
import com.axelor.apps.sale.db.repo.SaleOrderRepository;
|
||||
import com.axelor.apps.stock.db.StockMove;
|
||||
import com.axelor.apps.stock.db.repo.StockMoveRepository;
|
||||
import com.axelor.auth.db.User;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.schema.actions.ActionView;
|
||||
import com.axelor.rpc.ActionRequest;
|
||||
import com.axelor.rpc.ActionResponse;
|
||||
import com.axelor.team.db.TeamTask;
|
||||
import java.util.Map;
|
||||
|
||||
public class ClientViewController {
|
||||
|
||||
public void completeClientViewIndicators(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
Map<String, Object> map;
|
||||
map = Beans.get(ClientViewService.class).updateClientViewIndicators();
|
||||
|
||||
response.setValues(map);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/* SALEORDER OnCLick */
|
||||
public void showClientMyOrdersInProgress(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getOrdersInProgressOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Orders in progress"))
|
||||
.model(SaleOrder.class.getName())
|
||||
.add("grid", "sale-order-grid-client")
|
||||
.add("form", "sale-order-form-client")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyQuotation(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getQuotationsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("My quotations"))
|
||||
.model(SaleOrder.class.getName())
|
||||
.add("grid", "sale-order-grid")
|
||||
.add("form", "sale-order-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyLastOrder(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getLastOrderOfUser(clientUser);
|
||||
SaleOrder saleOrder = Beans.get(SaleOrderRepository.class).all().filter(domain).fetchOne();
|
||||
if (saleOrder != null) {
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Last order"))
|
||||
.model(SaleOrder.class.getName())
|
||||
.add("form", "sale-order-form-client")
|
||||
.context("_showRecord", saleOrder.getId())
|
||||
.map());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/* PROJECT OnClick */
|
||||
public void showClientMyTotalProjects(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getTotalProjectsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Total projects"))
|
||||
.model(Project.class.getName())
|
||||
.add("grid", "project-grid")
|
||||
.add("form", "project-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyNewTasks(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getNewTasksOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("New tasks"))
|
||||
.model(TeamTask.class.getName())
|
||||
.add("grid", "team-task-grid")
|
||||
.add("form", "team-task-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyTasksInProgress(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getTasksInProgressOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Tasks in progress"))
|
||||
.model(TeamTask.class.getName())
|
||||
.add("grid", "team-task-grid")
|
||||
.add("form", "team-task-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyTasksDue(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getTasksDueOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Tasks due"))
|
||||
.model(TeamTask.class.getName())
|
||||
.add("grid", "team-task-grid")
|
||||
.add("form", "team-task-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/* STOCKMOVE OnClick */
|
||||
public void showClientMyLastDelivery(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getLastDeliveryOfUser(clientUser);
|
||||
StockMove stockMove = Beans.get(StockMoveRepository.class).all().filter(domain).fetchOne();
|
||||
if (stockMove != null) {
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Last delivery"))
|
||||
.model(StockMove.class.getName())
|
||||
.add("form", "stock-move-form")
|
||||
.context("_showRecord", stockMove.getId())
|
||||
.domain(domain)
|
||||
.map());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyNextDelivery(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getNextDeliveryOfUser(clientUser);
|
||||
StockMove stockMove = Beans.get(StockMoveRepository.class).all().filter(domain).fetchOne();
|
||||
if (stockMove != null) {
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Next delivery"))
|
||||
.model(StockMove.class.getName())
|
||||
.add("form", "stock-move-form")
|
||||
.context("_showRecord", stockMove.getId())
|
||||
.domain(domain)
|
||||
.map());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyPlannedDeliveries(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getPlannedDeliveriesOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Planned deliveries"))
|
||||
.model(StockMove.class.getName())
|
||||
.add("grid", "stock-move-grid")
|
||||
.add("form", "stock-move-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientReversions(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getReversionsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("My reversions"))
|
||||
.model(StockMove.class.getName())
|
||||
.add("grid", "stock-move-grid")
|
||||
.add("form", "stock-move-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/* INVOICE OnClick */
|
||||
public void showClientMyOverdueInvoices(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getOverdueInvoicesOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Overdue invoices"))
|
||||
.model(Invoice.class.getName())
|
||||
.add("grid", "invoice-grid")
|
||||
.add("form", "invoice-client-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyAwaitingInvoices(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getAwaitingInvoicesOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Awaiting invoices"))
|
||||
.model(Invoice.class.getName())
|
||||
.add("grid", "invoice-grid")
|
||||
.add("form", "invoice-client-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyTotalRemaining(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getTotalRemainingOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Total remaining"))
|
||||
.model(Invoice.class.getName())
|
||||
.add("grid", "invoice-grid")
|
||||
.add("form", "invoice-client-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyRefund(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getRefundOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("My refund"))
|
||||
.model(Invoice.class.getName())
|
||||
.add("grid", "invoice-refund-grid")
|
||||
.add("form", "invoice-client-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
/* TICKETS OnClick */
|
||||
public void showClientMyCustomerTickets(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getTicketsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Customer tickets"))
|
||||
.model(Ticket.class.getName())
|
||||
.add("grid", "ticket-grid")
|
||||
.add("form", "ticket-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyCompanyTickets(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getCompanyTicketsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Company tickets"))
|
||||
.model(Ticket.class.getName())
|
||||
.add("grid", "ticket-grid")
|
||||
.add("form", "ticket-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyResolvedTickets(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getResolvedTicketsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Resolved tickets"))
|
||||
.model(Ticket.class.getName())
|
||||
.add("grid", "ticket-grid")
|
||||
.add("form", "ticket-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void showClientMyLateTickets(ActionRequest request, ActionResponse response) {
|
||||
try {
|
||||
ClientViewService clientViewService = Beans.get(ClientViewService.class);
|
||||
User clientUser = clientViewService.getClientUser();
|
||||
String domain = clientViewService.getLateTicketsOfUser(clientUser);
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Late tickets"))
|
||||
.model(Ticket.class.getName())
|
||||
.add("grid", "ticket-grid")
|
||||
.add("form", "ticket-form")
|
||||
.domain(domain)
|
||||
.map());
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
<?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="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>
|
||||
|
||||
<input file="base_appPortal.csv" separator=";" type="com.axelor.apps.base.db.AppPortal" call="com.axelor.csv.script.ImportApp:importApp">
|
||||
<bind column="dependsOn" to="dependsOnSet" search="self.code in :dependsOn" eval="dependsOn.split(',') as List"/>
|
||||
</input>
|
||||
|
||||
</csv-inputs>
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
|
||||
"perm.client.portal.all";"com.axelor.apps.client.portal.db.*";"x";"x";"x";"x";"x";;;"Admin"
|
||||
|
@ -0,0 +1,2 @@
|
||||
"name";"code";"installOrder";"description";"imagePath";"modules";"dependsOn";"sequence"
|
||||
"Portal";"portal";27;"Portal configuration";"app-portal.png";"axelor-client-portal";"base";31
|
||||
|
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,40 @@
|
||||
<?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="AppPortal" lang="java" extends="App">
|
||||
|
||||
<boolean name="manageSaleOrders" title="Manage sale orders" default="true"/>
|
||||
<boolean name="manageInvoices" title="Manage invoices" default="true"/>
|
||||
<boolean name="manageTickets" title="Manage tickets" default="true"/>
|
||||
<boolean name="manageProjects" title="Manage projects" default="true"/>
|
||||
<boolean name="manageDelivery" title="Manage delivery" default="true"/>
|
||||
<boolean name="canConfirmOnline" title="Can confirm online" default="true"/>
|
||||
<boolean name="showCatalog" title="Display product catalog" default="true"/>
|
||||
|
||||
<boolean name="canPayOnline" title="Can pay online" default="false"/>
|
||||
<many-to-many name="onlinePaymentMethodSet" ref="com.axelor.apps.client.portal.db.OnlinePaymentMethod" title="Online payment methods"/>
|
||||
<integer name="portalSelect" title="Portal" selection="clientportal.extern.or.intern" default="1"/>
|
||||
|
||||
<extra-code><![CDATA[
|
||||
|
||||
// STATUS SELECT
|
||||
public static final int ABS_PORTAL = 1;
|
||||
public static final int EXTERNAL_PORTAL = 2;
|
||||
|
||||
]]></extra-code>
|
||||
<track>
|
||||
<field name="manageSaleOrders" on="UPDATE"/>
|
||||
<field name="manageInvoices" on="UPDATE"/>
|
||||
<field name="manageTickets" on="UPDATE"/>
|
||||
<field name="manageProjects" on="UPDATE"/>
|
||||
<field name="manageDelivery" on="UPDATE"/>
|
||||
<field name="canConfirmOnline" on="UPDATE"/>
|
||||
<field name="canPayOnline" on="UPDATE"/>
|
||||
<field name="portalSelect" on="UPDATE"/>
|
||||
</track>
|
||||
</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 name="client-portal" package="com.axelor.apps.client.portal.db"/>
|
||||
|
||||
<entity name="OnlinePaymentMethod" lang="java" cacheable="true">
|
||||
|
||||
<string name="name" title="Name" required="true"/>
|
||||
<string name="code" title="Code" required="true"/>
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,12 @@
|
||||
<?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="Partner" lang="java">
|
||||
|
||||
<string name="password" title="Password"/>
|
||||
|
||||
</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 name="sale" package="com.axelor.apps.sale.db"/>
|
||||
|
||||
<entity name="SaleOrder" lang="java">
|
||||
|
||||
<many-to-one name="electronicSignature" ref="com.axelor.meta.db.MetaFile" title="Electronic signature" />
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal",,,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online",,,
|
||||
"Can pay online",,,
|
||||
"Catalog",,,
|
||||
"Code",,,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature",,,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices",,,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders",,,
|
||||
"Manage tickets",,,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name",,,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method",,,
|
||||
"Online payment methods",,,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password",,,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal",,,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","App Portal",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Kann online bestätigen",,
|
||||
"Can pay online","Kann online bezahlen",,
|
||||
"Catalog",,,
|
||||
"Code","Code",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Elektronische Unterschrift",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Rechnungen verwalten",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Verwalten von Verkaufsaufträgen",,
|
||||
"Manage tickets","Tickets verwalten",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Name",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Online-Zahlungsmethode",,
|
||||
"Online payment methods","Online-Zahlungsmethoden",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Passwort",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","Wert:Portal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal",,,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online",,,
|
||||
"Can pay online",,,
|
||||
"Catalog",,,
|
||||
"Code",,,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature",,,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices",,,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders",,,
|
||||
"Manage tickets",,,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name",,,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method",,,
|
||||
"Online payment methods",,,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password",,,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal",,,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","Portal de aplicaciones",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Puede confirmar en línea",,
|
||||
"Can pay online","Puede pagar en línea",,
|
||||
"Catalog",,,
|
||||
"Code","Código",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Firma electrónica",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Gestionar facturas",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Gestionar los pedidos de venta",,
|
||||
"Manage tickets","Gestión de tickets",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Nombre",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Método de pago en línea",,
|
||||
"Online payment methods","Métodos de pago en línea",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Contraseña",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","valor:Portal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal","Portail ABS",,
|
||||
"App Portal","App Portail",,
|
||||
"Assign to customer","Assigné au client",,
|
||||
"Assign to supplier","Assigné au fournisseur",,
|
||||
"Awaiting invoices","En attente de paiement",,
|
||||
"Can confirm online","Peut confimer en ligne",,
|
||||
"Can pay online","Peut payer en ligne",,
|
||||
"Catalog","Catalogue produit",,
|
||||
"Code",,,
|
||||
"Company tickets","Tickets société",,
|
||||
"Customer helpdesk","Support client",,
|
||||
"Customer tickets","Tickets clients",,
|
||||
"Delivery","Livraison",,
|
||||
"Display product catalog","Afficher le catalogue produit",,
|
||||
"Electronic signature","Signature électronique",,
|
||||
"External portal","Portail externe",,
|
||||
"Helpdesk","Support client",,
|
||||
"Invoicing","Facturation",,
|
||||
"Last delivery","Dernière livraison",,
|
||||
"Last order","Dernière commande",,
|
||||
"Late tickets","Tickets en retard",,
|
||||
"Manage delivery","Gérer les livraisons",,
|
||||
"Manage invoices","Gérer les factures",,
|
||||
"Manage projects","Gérer les projets",,
|
||||
"Manage sale orders","Gérer les devis/cmdes client",,
|
||||
"Manage tickets","Gérer les tickets",,
|
||||
"Modules",,,
|
||||
"Months","Mois",,
|
||||
"My deliveries","Mes livraisons",,
|
||||
"My invoices","Mes factures",,
|
||||
"My projects","Mes projets",,
|
||||
"My quotations","Mes devis",,
|
||||
"My refund","Mes avoirs",,
|
||||
"My reversions","Mes retours",,
|
||||
"My space","Mon espace",,
|
||||
"My tickets","Mes tickets",,
|
||||
"Name","Nom",,
|
||||
"New tasks","Nouvelles tâches",,
|
||||
"Next delivery","Prochaine livraison",,
|
||||
"None","Aucune",,
|
||||
"Online payment method","Méthode de paiement en ligne",,
|
||||
"Online payment methods","Méthodes de paiement en ligne",,
|
||||
"Order","Commande",,
|
||||
"Orders in progress","Commandes en cours",,
|
||||
"Overdue invoices","En retard de paiement",,
|
||||
"Password","Mot de passe",,
|
||||
"Planned deliveries","Livraisons prévues",,
|
||||
"Portal","Portail",,
|
||||
"Project","Projet",,
|
||||
"Projects","Projets",,
|
||||
"Resolved tickets","Tickets résolus",,
|
||||
"Sale order","Commande",,
|
||||
"Sum","Somme",,
|
||||
"Sum of last 4 months invoices","Somme des factures des 4 derniers mois",,
|
||||
"Tasks due","Tâches en retard",,
|
||||
"Tasks in progress","Tâches en cours",,
|
||||
"Total projects","Total des projets",,
|
||||
"Total remaining","Total restant",,
|
||||
"chart",,,
|
||||
"value:Portal","Portal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","Portale delle applicazioni",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Può confermare online",,
|
||||
"Can pay online","Può pagare online",,
|
||||
"Catalog",,,
|
||||
"Code","Codice",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Firma elettronica",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Gestire le fatture",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Gestire gli ordini di vendita",,
|
||||
"Manage tickets","Gestire i biglietti",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Nome",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Metodo di pagamento online",,
|
||||
"Online payment methods","Metodi di pagamento online",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","La password",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","valore:Portale",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","App Portal",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Kan online bevestigen",,
|
||||
"Can pay online","Kan online betalen",,
|
||||
"Catalog",,,
|
||||
"Code","Code",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Elektronische handtekening",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Facturen beheren",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Verkooporders beheren",,
|
||||
"Manage tickets","Beheer tickets",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Naam",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Online betaalmethode",,
|
||||
"Online payment methods","Online betaalmethoden",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Wachtwoord",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","waarde: Portaal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","Portal App Portal",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Potwierdź online",,
|
||||
"Can pay online","Może płacić online",,
|
||||
"Catalog",,,
|
||||
"Code","Kod",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Podpis elektroniczny",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Zarządzanie fakturami",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Zarządzanie zleceniami sprzedaży",,
|
||||
"Manage tickets","Zarządzaj biletami",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Nazwa",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Metoda płatności online",,
|
||||
"Online payment methods","Metody płatności online",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Hasło",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","wartość: Portal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","Portal de Aplicações",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Pode confirmar online",,
|
||||
"Can pay online","Pode pagar online",,
|
||||
"Catalog",,,
|
||||
"Code","Código",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Assinatura electrónica",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Administrar faturas",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Administrar ordens de venda",,
|
||||
"Manage tickets","Gerir bilhetes",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Nome e Sobrenome",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Método de pagamento online",,
|
||||
"Online payment methods","Métodos de pagamento online",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Senha",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","valor:Portal",,
|
||||
|
@ -0,0 +1,61 @@
|
||||
"key","message","comment","context"
|
||||
"ABS portal",,,
|
||||
"App Portal","App Portal",,
|
||||
"Assign to customer",,,
|
||||
"Assign to supplier",,,
|
||||
"Awaiting invoices",,,
|
||||
"Can confirm online","Может подтвердить онлайн",,
|
||||
"Can pay online","Можно оплатить онлайн",,
|
||||
"Catalog",,,
|
||||
"Code","Код",,
|
||||
"Company tickets",,,
|
||||
"Customer helpdesk",,,
|
||||
"Customer tickets",,,
|
||||
"Delivery",,,
|
||||
"Display product catalog",,,
|
||||
"Electronic signature","Электронная подпись",,
|
||||
"External portal",,,
|
||||
"Helpdesk",,,
|
||||
"Invoicing",,,
|
||||
"Last delivery",,,
|
||||
"Last order",,,
|
||||
"Late tickets",,,
|
||||
"Manage delivery",,,
|
||||
"Manage invoices","Управление счетами-фактурами",,
|
||||
"Manage projects",,,
|
||||
"Manage sale orders","Управление заказами на продажу",,
|
||||
"Manage tickets","Управлять билетами",,
|
||||
"Modules",,,
|
||||
"Months",,,
|
||||
"My deliveries",,,
|
||||
"My invoices",,,
|
||||
"My projects",,,
|
||||
"My quotations",,,
|
||||
"My refund",,,
|
||||
"My reversions",,,
|
||||
"My space",,,
|
||||
"My tickets",,,
|
||||
"Name","Имя",,
|
||||
"New tasks",,,
|
||||
"Next delivery",,,
|
||||
"None",,,
|
||||
"Online payment method","Онлайн-оплата",,
|
||||
"Online payment methods","Способы оплаты онлайн",,
|
||||
"Order",,,
|
||||
"Orders in progress",,,
|
||||
"Overdue invoices",,,
|
||||
"Password","Пароль",,
|
||||
"Planned deliveries",,,
|
||||
"Portal",,,
|
||||
"Project",,,
|
||||
"Projects",,,
|
||||
"Resolved tickets",,,
|
||||
"Sale order",,,
|
||||
"Sum",,,
|
||||
"Sum of last 4 months invoices",,,
|
||||
"Tasks due",,,
|
||||
"Tasks in progress",,,
|
||||
"Total projects",,,
|
||||
"Total remaining",,,
|
||||
"chart",,,
|
||||
"value:Portal","значение:Портал",,
|
||||
|
@ -0,0 +1,17 @@
|
||||
<?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="portal_role.csv" separator=";" type="com.axelor.auth.db.Role" search="self.name = :name"/>
|
||||
|
||||
<input file="portal_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,4 @@
|
||||
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
|
||||
"perm.client.portal.OnlinePaymentMethod;r";"com.axelor.apps.client.portal.db.OnlinePaymentMethod";"x";;;;;;;"Portal Read"
|
||||
"perm.client.portal.OnlinePaymentMethod;rwc";"com.axelor.apps.client.portal.db.OnlinePaymentMethod";"x";"x";"x";;;;;"Portal User"
|
||||
"perm.client.portal.OnlinePaymentMethod;rwcde";"com.axelor.apps.client.portal.db.OnlinePaymentMethod";"x";"x";"x";"x";"x";;;"Portal Manager"
|
||||
|
@ -0,0 +1,4 @@
|
||||
"name";"description"
|
||||
"Portal Read";
|
||||
"Portal User";
|
||||
"Portal Manager";
|
||||
|
@ -0,0 +1,34 @@
|
||||
<?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-portal-config-form" title="App Portal" model="com.axelor.apps.base.db.AppPortal" canDelete="false" canNew="false" width="large">
|
||||
<panel name="appPortalConfigPanel" colSpan="12">
|
||||
<panel name="moduleManager" colSpan="12" title="Modules">
|
||||
<field name="manageSaleOrders" widget="boolean-switch"/>
|
||||
<field name="manageInvoices" widget="boolean-switch"/>
|
||||
<field name="manageDelivery" widget="boolean-switch"/>
|
||||
<field name="manageTickets" widget="boolean-switch"/>
|
||||
<field name="manageProjects" widget="boolean-switch"/>
|
||||
<field name="showCatalog" widget="boolean-switch"/>
|
||||
</panel>
|
||||
<panel name="portalSelectConfigPanel" colSpan="12">
|
||||
<field name="portalSelect"/>
|
||||
<panel name="onlineActionPanel" colSpan="12">
|
||||
<field name="canConfirmOnline" widget="boolean-switch" showIf="portalSelect == 2"/>
|
||||
<field name="canPayOnline" widget="boolean-switch" showIf="portalSelect == 2"/>
|
||||
<field name="onlinePaymentMethodSet" colSpan="12" showIf="manageInvoices && canPayOnline"/>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<panel-mail name="mailPanel">
|
||||
<mail-messages limit="4"/>
|
||||
<mail-followers/>
|
||||
</panel-mail>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,33 @@
|
||||
<?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">
|
||||
|
||||
|
||||
<chart name="chart.client.portal.sum.invoices.four.months" title="Sum of last 4 months invoices">
|
||||
<dataset type="jpql">
|
||||
<![CDATA[
|
||||
SELECT
|
||||
SUM(self.inTaxTotal) AS amount,
|
||||
MONTH(self.invoiceDate) AS month
|
||||
FROM
|
||||
Invoice self
|
||||
WHERE
|
||||
self.invoiceDate >= :fromDate
|
||||
GROUP BY
|
||||
MONTH(self.invoiceDate)
|
||||
ORDER BY
|
||||
month
|
||||
]]>
|
||||
</dataset>
|
||||
<category key="month" type="month" title="Months" />
|
||||
<series key="amount" type="bar" title="Sum" />
|
||||
</chart>
|
||||
|
||||
|
||||
<action-view name="dashlet.client.portal.sum.invoices.four.months" title="chart">
|
||||
<view type="chart" name="chart.client.portal.sum.invoices.four.months"/>
|
||||
<context name="fromDate" expr="eval: java.time.LocalDate.now().minusMonths(3)"/>
|
||||
</action-view>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,215 @@
|
||||
<?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="wizard-client-form" title="My space" model="com.axelor.apps.base.db.Wizard" onNew="action-group-client-view-onnew" width="large" editable="false" canDelete="false" canEdit="false" canNew="false" canSave="false" canCopy="false" canArchive="false" canAttach="false">
|
||||
<panel name="moduleIconPanel" colSpan="12">
|
||||
<panel name="mainModulePanel" colSpan="10" itemSpan="2" colOffset="2">
|
||||
<button name="myProjectsBtn" title="Project" onClick="wizard-client-form-open-my-projects" css="img-button client-img-menu btn-default" icon="img/128px/app-project.png" if-module="axelor-project" />
|
||||
<button name="myQuotationsBtn" title="Sale order" onClick="wizard-client-form-open-my-quotations" css="img-button client-img-menu btn-default" icon="img/128px/app-sale.png" if-module="axelor-sale" />
|
||||
<button name="myInvoicesBtn" title="Invoicing" onClick="wizard-client-form-open-my-invoices" css="img-button client-img-menu btn-default" icon="img/128px/app-invoice.png" if-module="axelor-account" />
|
||||
<button name="myDeliveriesBtn" title="Delivery" onClick="wizard-client-form-open-my-deliveries" css="img-button client-img-menu btn-default" icon="img/128px/app-stock.png" if-module="axelor-stock" />
|
||||
<button name="myTicketsBtn" title="Helpdesk" onClick="wizard-client-form-open-my-tickets" css="img-button client-img-menu btn-default" icon="img/128px/app-helpdesk.png" if-module="axelor-helpdesk" />
|
||||
<button name="myCatalogBtn" title="Catalog" onClick="wizard-client-form-open-my-catalog" css="img-button client-img-menu btn-default" icon="img/128px/product-default_100.png" />
|
||||
</panel>
|
||||
</panel>
|
||||
<panel name="indicatorsPanel" colSpan="12">
|
||||
<panel name="mainDashboardPanel" colSpan="10" itemSpan="2" colOffset="2">
|
||||
<panel name="projectPanel" title="Project" if-module="axelor-project" itemSpan="12" hidden="true">
|
||||
<button name="$totalProjects" title="Projects" width="190px" widget="info-button" onClick="action-method-show-client-view-total-projects" />
|
||||
<button name="$newTasks" title="New tasks" width="190px" widget="info-button" onClick="action-method-show-client-view-new-tasks"/>
|
||||
<button name="$tasksInProgress" title="Tasks in progress" width="190px" widget="info-button" onClick="action-method-show-client-view-tasks-progress"/>
|
||||
<button name="$tasksDue" title="Tasks due" width="190px" widget="info-button" onClick="action-method-show-client-view-tasks-due"/>
|
||||
</panel>
|
||||
<panel name="saleOrderPanel" title="Order" if-module="axelor-sale" itemSpan="12" hidden="true">
|
||||
<button name="$myQuotation" title="My quotations" width="190px" widget="info-button" onClick="action-method-show-client-view-my-quotation"/>
|
||||
<button name="$ordersInProgress" title="Orders in progress" width="190px" widget="info-button" onClick="action-method-show-client-view-orders-in-progress" />
|
||||
<button name="$lastOrder" title="Last order" width="190px" widget="info-button" onClick="action-method-show-client-view-last-order"/>
|
||||
</panel>
|
||||
<panel name="invoicePanel" title="Invoicing" if-module="axelor-account" itemSpan="12" hidden="true">
|
||||
<button name="$overdueInvoices" title="Overdue invoices" width="190px" widget="info-button" onClick="action-method-show-client-view-overdue-invoices"/>
|
||||
<button name="$awaitingInvoices" title="Awaiting invoices" width="190px" widget="info-button" onClick="action-method-show-client-view-awaiting-invoices"/>
|
||||
<button name="$totalRemaining" title="Total remaining" width="190px" widget="info-button" onClick="action-method-show-client-view-total-remaining"/>
|
||||
<button name="$myRefund" title="My refund" width="190px" widget="info-button" onClick="action-method-show-client-view-refund"/>
|
||||
|
||||
</panel>
|
||||
<panel name="deliveryPanel" title="Delivery" if-module="axelor-stock" itemSpan="12" hidden="true">
|
||||
<button name="$lastDelivery" title="Last delivery" width="190px" widget="info-button" onClick="action-method-show-client-view-last-delivery"/>
|
||||
<button name="$nextDelivery" title="Next delivery" width="190px" widget="info-button" onClick="action-method-show-client-view-next-delivery"/>
|
||||
<button name="$plannedDeliveries" title="Planned deliveries" width="190px" widget="info-button" onClick="action-method-show-client-view-planned-deliveries"/>
|
||||
<button name="$myReversions" title="My reversions" width="190px" widget="info-button" onClick="action-method-show-client-view-reversions"/>
|
||||
</panel>
|
||||
<panel name="ticketPanel" title="Customer helpdesk" if-module="axelor-helpdesk" itemSpan="12" hidden="true">
|
||||
<button name="$customerTickets" title="Assign to customer" width="190px" widget="info-button" onClick="action-method-show-client-view-customer-tickets"/>
|
||||
<button name="$companyTickets" title="Assign to supplier" width="190px" widget="info-button" onClick="action-method-show-client-view-company-tickets"/>
|
||||
<button name="$resolvedTickets" title="Resolved tickets" width="190px" height="100px" widget="info-button" onClick="action-method-show-client-view-resolved-tickets" />
|
||||
<button name="$lateTickets" title="Late tickets" width="190px" height="100px" widget="info-button" onClick="action-method-show-client-view-late-tickets" />
|
||||
</panel>
|
||||
</panel>
|
||||
<panel-dashlet colSpan="12" name="dashletSumInvoices" action="dashlet.client.portal.sum.invoices.four.months" hidden="true"/>
|
||||
</panel>
|
||||
</form>
|
||||
|
||||
<action-group name="action-group-client-view-onnew">
|
||||
<action name="action-method-complete-client-view-indicators"/>
|
||||
<action name="action-attrs-client-view-hide-modules"/>
|
||||
</action-group>
|
||||
|
||||
<action-attrs name="action-attrs-client-view-hide-modules">
|
||||
<attribute name="hidden" for="myQuotationsBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageSaleOrders())"/>
|
||||
<attribute name="hidden" for="saleOrderPanel" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageSaleOrders())"/>
|
||||
<attribute name="hidden" for="myInvoicesBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageInvoices())"/>
|
||||
<attribute name="hidden" for="invoicePanel" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageInvoices())"/>
|
||||
<attribute name="hidden" for="dashletSumInvoices" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageInvoices())"/>
|
||||
<attribute name="hidden" for="myTicketsBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageTickets())"/>
|
||||
<attribute name="hidden" for="ticketPanel" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageTickets())"/>
|
||||
<attribute name="hidden" for="myProjectsBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageProjects())"/>
|
||||
<attribute name="hidden" for="projectPanel" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageProjects())"/>
|
||||
<attribute name="hidden" for="myDeliveriesBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageDelivery())"/>
|
||||
<attribute name="hidden" for="deliveryPanel" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getManageDelivery())"/>
|
||||
<attribute name="hidden" for="myCatalogBtn" expr="eval: !(__config__.app.isApp('portal') && __config__.app.getApp('portal').getShowCatalog())"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-view name="wizard-client-form-open-my-catalog" title="Catalog"
|
||||
model="com.axelor.apps.base.db.Product" >
|
||||
<view type="cards" name="product-cards" />
|
||||
<view type="grid" name="product-grid" />
|
||||
<view type="form" name="product-form" />
|
||||
<domain>self.sellable = true</domain>
|
||||
</action-view>
|
||||
|
||||
<action-view name="wizard-client-form-open-my-tickets" title="My tickets"
|
||||
model="com.axelor.apps.helpdesk.db.Ticket" >
|
||||
<view type="grid" name="ticket-grid"/>
|
||||
<view type="form" name="ticket-form" />
|
||||
<domain>self.customer = :_myPartner or self.assignedToUser =:_user</domain>
|
||||
<context name="_myPartner" expr="eval:__user__.partner"/>
|
||||
<context name="_user" expr="eval:__user__"/>
|
||||
</action-view>
|
||||
|
||||
|
||||
<action-view name="wizard-client-form-open-my-projects" title="My projects"
|
||||
model="com.axelor.apps.project.db.Project" >
|
||||
<view type="grid" name="business-project-grid"/>
|
||||
<view type="form" name="project-form" />
|
||||
<domain>self.clientPartner = :_myPartner</domain>
|
||||
<context name="_myPartner" expr="eval:__user__.partner"/>
|
||||
</action-view>
|
||||
|
||||
<action-view name="wizard-client-form-open-my-quotations" title="My quotations"
|
||||
model="com.axelor.apps.sale.db.SaleOrder" >
|
||||
<view type="grid" name="sale-order-grid-client"/>
|
||||
<view type="form" name="sale-order-form-client" />
|
||||
<domain>self.clientPartner = :_myPartner</domain>
|
||||
<context name="_myPartner" expr="eval:__user__.partner"/>
|
||||
</action-view>
|
||||
|
||||
<action-view name="wizard-client-form-open-my-invoices" title="My invoices"
|
||||
model="com.axelor.apps.account.db.Invoice" >
|
||||
<view type="grid" name="invoice-grid"/>
|
||||
<view type="form" name="invoice-client-form" />
|
||||
<domain>self.partner = :_myPartner</domain>
|
||||
<context name="_myPartner" expr="eval:__user__.partner"/>
|
||||
</action-view>
|
||||
|
||||
<action-view name="wizard-client-form-open-my-deliveries" title="My deliveries"
|
||||
model="com.axelor.apps.stock.db.StockMove" >
|
||||
<view type="grid" name="stock-move-grid"/>
|
||||
<view type="form" name="stock-move-form" />
|
||||
<domain>self.partner = :_myPartner</domain>
|
||||
<context name="_myPartner" expr="eval:__user__.partner"/>
|
||||
</action-view>
|
||||
|
||||
<action-method name="action-method-complete-client-view-indicators" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="completeClientViewIndicators"/>
|
||||
</action-method>
|
||||
|
||||
<!-- Project OnClick -->
|
||||
<action-method name="action-method-show-client-view-total-projects" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyTotalProjects"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-new-tasks" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyNewTasks"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-tasks-progress" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyTasksInProgress"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-tasks-due" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyTasksDue"/>
|
||||
</action-method>
|
||||
|
||||
<!-- SaleOrder OnClick -->
|
||||
<action-method name="action-method-show-client-view-orders-in-progress" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyOrdersInProgress"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-my-quotation" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyQuotation"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-last-order" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyLastOrder"/>
|
||||
</action-method>
|
||||
|
||||
<!-- StockMove OnClick -->
|
||||
<action-method name="action-method-show-client-view-last-delivery" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyLastDelivery"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-next-delivery" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyNextDelivery"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-planned-deliveries" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyPlannedDeliveries"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-reversions" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientReversions"/>
|
||||
</action-method>
|
||||
|
||||
<!-- Invoice OnClick -->
|
||||
<action-method name="action-method-show-client-view-overdue-invoices" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyOverdueInvoices"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-awaiting-invoices" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyAwaitingInvoices"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-total-remaining" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyTotalRemaining"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-refund" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyRefund"/>
|
||||
</action-method>
|
||||
|
||||
<!-- Ticket OnClick -->
|
||||
<action-method name="action-method-show-client-view-customer-tickets" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyCustomerTickets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-company-tickets" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyCompanyTickets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-resolved-tickets" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyResolvedTickets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-method-show-client-view-late-tickets" model="com.axelor.apps.base.db.Wizard">
|
||||
<call class="com.axelor.apps.portal.web.ClientViewController" method="showClientMyLateTickets"/>
|
||||
</action-method>
|
||||
|
||||
<action-view name="wizard-client-view" model="com.axelor.apps.base.db.Wizard" title="My space">
|
||||
<view name="wizard-client-form" type="form"/>
|
||||
</action-view>
|
||||
|
||||
|
||||
</object-views>
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
<?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="online-payment-method-grid" title="Online payment methods" model="com.axelor.apps.client.portal.db.OnlinePaymentMethod">
|
||||
<field name="name"/>
|
||||
<field name="code" x-bind="{{code|unaccent|uppercase}}"/>
|
||||
</grid>
|
||||
|
||||
<form name="online-payment-method-form" title="Online payment method" model="com.axelor.apps.client.portal.db.OnlinePaymentMethod">
|
||||
<panel name="mainPanel" >
|
||||
<field name="name"/>
|
||||
<field name="code" x-bind="{{code|unaccent|uppercase}}"/>
|
||||
</panel>
|
||||
</form>
|
||||
</object-views>
|
||||
@ -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">
|
||||
|
||||
|
||||
<selection name='clientportal.extern.or.intern'>
|
||||
<option value='1'>ABS portal</option>
|
||||
<option value='2'>External portal</option>
|
||||
</selection>
|
||||
|
||||
</object-views>
|
||||
Reference in New Issue
Block a user