Browse Source

implemented showing members of companies

featue/module_registry
Stephan Richter 3 months ago
parent
commit
edeffc572c
  1. 23
      company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java
  2. 18
      core/src/main/java/de/srsoftware/umbrella/core/model/Company.java
  3. 8
      frontend/src/routes/company/Index.svelte
  4. 2
      frontend/src/routes/project/View.svelte

23
company/src/main/java/de/srsoftware/umbrella/company/CompanyModule.java

@ -17,9 +17,8 @@ import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.api.CompanyService; import de.srsoftware.umbrella.core.api.CompanyService;
import de.srsoftware.umbrella.core.api.UserService; import de.srsoftware.umbrella.core.api.UserService;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Company; import de.srsoftware.umbrella.core.model.*;
import de.srsoftware.umbrella.core.model.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
@ -110,7 +109,23 @@ public class CompanyModule extends BaseHandler implements CompanyService {
@Override @Override
public Map<Long,Company> listCompaniesOf(UmbrellaUser user) throws UmbrellaException { public Map<Long,Company> listCompaniesOf(UmbrellaUser user) throws UmbrellaException {
return companyDb.listCompaniesOf(user.id()); return loadMembers(companyDb.listCompaniesOf(user.id()));
}
public Map<Long,Company> loadMembers(Map<Long,Company> companyMap){
loadMembers(companyMap.values());
return companyMap;
}
public Collection<Company> loadMembers(Collection<Company> companyList) {
var userMap = new HashMap<Long,UmbrellaUser>();
for (var company : companyList){
for (var userId : companyDb.getMembers(company.id())){
var user = userMap.computeIfAbsent(userId,k -> users.loadUser(userId));
company.members().put(userId,user);
}
}
return companyList;
} }
@Override @Override

18
core/src/main/java/de/srsoftware/umbrella/core/model/Company.java

@ -9,10 +9,7 @@ import de.srsoftware.tools.Mappable;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Currency; import java.util.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -23,6 +20,7 @@ public class Company implements Mappable {
private long lastCustomerNumber; private long lastCustomerNumber;
private int decimals; private int decimals;
private final Set<String> dirtyFields = new HashSet<>(); private final Set<String> dirtyFields = new HashSet<>();
private final Map<Long,UmbrellaUser> members;
private Company(long id){ private Company(long id){
this(id,null,null,null,null,null,null,null,0,2,null,null,null,null); this(id,null,null,null,null,null,null,null,0,2,null,null,null,null);
@ -43,6 +41,7 @@ public class Company implements Mappable {
this.currency = currency; this.currency = currency;
this.email = email; this.email = email;
this.bankAccount = bankAccount; this.bankAccount = bankAccount;
this.members = new HashMap<>();
} }
public String address(){ public String address(){
@ -98,6 +97,10 @@ public class Company implements Mappable {
return lastCustomerNumber; return lastCustomerNumber;
} }
public Map<Long, UmbrellaUser> members(){
return members;
}
public String name(){ public String name(){
return name; return name;
} }
@ -175,6 +178,10 @@ public class Company implements Mappable {
@Override @Override
public Map<String, Object> toMap() { public Map<String, Object> toMap() {
var memberMap = new HashMap<Long,Map<String,Object>>();
if (members != null) for (var entry : members.entrySet()){
memberMap.put(entry.getKey(),entry.getValue().toMap());
}
return Map.ofEntries( return Map.ofEntries(
entry(ID,id), entry(ID,id),
entry(NAME,name), entry(NAME,name),
@ -189,7 +196,8 @@ public class Company implements Mappable {
entry(CUSTOMER_NUMBER_PREFIX,emptyIfNull(customerNumberPrefix)), entry(CUSTOMER_NUMBER_PREFIX,emptyIfNull(customerNumberPrefix)),
entry(FIELD_CURRENCY,emptyIfNull(currency)), entry(FIELD_CURRENCY,emptyIfNull(currency)),
entry(EMAIL,emptyIfNull(email)), entry(EMAIL,emptyIfNull(email)),
entry(FIELD_BANK_ACCOUNT,emptyIfNull(bankAccount)) entry(FIELD_BANK_ACCOUNT,emptyIfNull(bankAccount)),
entry(MEMBERS,memberMap)
); );
} }

8
frontend/src/routes/company/Index.svelte

@ -84,7 +84,13 @@
<tr onclick={e => showDetail(cid)}> <tr onclick={e => showDetail(cid)}>
<td>{company.name}</td> <td>{company.name}</td>
<td>{company.email}</td> <td>{company.email}</td>
<td>{company.address.replace('\r','').replaceAll('\n',' / ')}</td> <td>
<ul>
{#each Object.entries(company.members) as [uid,member]}
<li>{member.name}</li>
{/each}
</ul>
</td>
</tr> </tr>
{#if selected==cid} {#if selected==cid}
<tr> <tr>

2
frontend/src/routes/project/View.svelte

@ -247,7 +247,7 @@
<tr> <tr>
<th> <th>
{t('tasks')} {t('tasks')}
<button onclick={addTask}>{t('add_task')}</button> <button onclick={addTask}>{t('add_object',{object:t('task')})}</button>
</th> </th>
<td class="tasks"> <td class="tasks">
{#if tasks} {#if tasks}

Loading…
Cancel
Save