1 package org.argeo.people.e4.parts;
2
3 import javax.jcr.Node;
4 import javax.jcr.NodeIterator;
5 import javax.jcr.PropertyType;
6 import javax.jcr.RepositoryException;
7
8 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
9 import org.argeo.cms.ui.eclipse.forms.FormToolkit;
10 import org.argeo.connect.ui.ConnectEditor;
11 import org.argeo.connect.ui.ConnectUiUtils;
12 import org.argeo.connect.ui.ConnectWorkbenchUtils;
13 import org.argeo.connect.ui.util.LazyCTabControl;
14 import org.argeo.connect.util.ConnectJcrUtils;
15 import org.argeo.eclipse.ui.EclipseUiUtils;
16 import org.argeo.people.PeopleException;
17 import org.argeo.people.PeopleNames;
18 import org.argeo.people.PeopleTypes;
19 import org.argeo.people.ui.PeopleMsg;
20 import org.argeo.people.ui.composites.BankAccountComposite;
21 import org.argeo.people.util.OrgJcrUtils;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.ModifyEvent;
24 import org.eclipse.swt.events.ModifyListener;
25 import org.eclipse.swt.layout.GridData;
26 import org.eclipse.swt.layout.GridLayout;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Control;
29 import org.eclipse.swt.widgets.Group;
30 import org.eclipse.swt.widgets.Text;
31
32
33
34
35
36
37
38
39
40 public class OrgAdminInfoCTab extends LazyCTabControl {
41 private static final long serialVersionUID = -7033074223243935324L;
42
43 private final ConnectEditor editor;
44 private final FormToolkit toolkit;
45 private final Node entity;
46
47
48 private AbstractFormPart notePart;
49 private AbstractFormPart formPart;
50
51 public OrgAdminInfoCTab(Composite parent, int style, ConnectEditor editor, Node entity) {
52 super(parent, style);
53 this.editor = editor;
54 this.toolkit = editor.getFormToolkit();
55 this.entity = entity;
56 }
57
58 @Override
59 public void refreshPartControl() {
60 notePart.refresh();
61 formPart.refresh();
62 layout(true, true);
63 }
64
65 @Override
66 public void createPartControl(Composite parent) {
67 parent.setLayout(new GridLayout());
68
69 Composite adminInfoCmp = toolkit.createComposite(parent);
70 adminInfoCmp.setLayoutData(EclipseUiUtils.fillWidth());
71 populateAdminInfoCmp(adminInfoCmp);
72
73 Composite payAccCmp = toolkit.createComposite(parent);
74 payAccCmp.setLayoutData(EclipseUiUtils.fillAll());
75 populateBankAccountGroup(payAccCmp);
76 }
77
78 private void populateAdminInfoCmp(Composite parent) {
79 parent.setLayout(new GridLayout(4, false));
80
81
82 ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.legalName.lead());
83 final Text legalNameTxt = toolkit.createText(parent, "", SWT.BORDER);
84 legalNameTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
85
86
87 ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.legalForm.lead());
88 final Text legalFormTxt = toolkit.createText(parent, "", SWT.BORDER);
89 legalFormTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
90
91
92 ConnectUiUtils.createBoldLabel(toolkit, parent, PeopleMsg.vatId.lead());
93 final Text vatIDTxt = toolkit.createText(parent, "", SWT.BORDER);
94 vatIDTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
95
96 notePart = new AbstractFormPart() {
97 public void refresh() {
98 super.refresh();
99 ConnectWorkbenchUtils.refreshFormTextWidget(editor, legalNameTxt, entity,
100 PeopleNames.PEOPLE_LEGAL_NAME);
101 ConnectWorkbenchUtils.refreshFormTextWidget(editor, legalFormTxt, entity,
102 PeopleNames.PEOPLE_LEGAL_FORM);
103 ConnectWorkbenchUtils.refreshFormTextWidget(editor, vatIDTxt, entity, PeopleNames.PEOPLE_VAT_ID_NB);
104 }
105 };
106
107
108 ConnectWorkbenchUtils.addModifyListener(legalFormTxt, entity, PeopleNames.PEOPLE_LEGAL_FORM, notePart);
109 ConnectWorkbenchUtils.addModifyListener(vatIDTxt, entity, PeopleNames.PEOPLE_VAT_ID_NB, notePart);
110
111
112 legalNameTxt.addModifyListener(new ModifyListener() {
113 private static final long serialVersionUID = 6068716814124883599L;
114
115 @Override
116 public void modifyText(ModifyEvent event) {
117
118 if (ConnectJcrUtils.setJcrProperty(entity, PeopleNames.PEOPLE_LEGAL_NAME, PropertyType.STRING,
119 legalNameTxt.getText())) {
120
121
122
123
124
125
126 notePart.markDirty();
127 }
128
129
130
131 }
132 });
133 notePart.initialize(editor.getManagedForm());
134 editor.getManagedForm().addPart(notePart);
135 }
136
137 private void populateBankAccountGroup(final Composite parent) {
138 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
139 final Group group = new Group(parent, 0);
140 group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
141 group.setText(PeopleMsg.paymentAccount.lead());
142 group.setLayout(EclipseUiUtils.noSpaceGridLayout());
143
144 formPart = new AbstractFormPart() {
145 public void refresh() {
146
147 super.refresh();
148 try {
149 if (!entity.hasNode(PeopleNames.PEOPLE_PAYMENT_ACCOUNTS) && editor.isEditing()) {
150 OrgJcrUtils.createPaymentAccount(entity, PeopleTypes.PEOPLE_BANK_ACCOUNT, "new");
151 entity.getSession().save();
152 }
153 } catch (RepositoryException e) {
154 throw new PeopleException("Unable to create bank account for " + entity, e);
155 }
156
157 Control[] children = group.getChildren();
158 for (Control child : children) {
159 child.dispose();
160 }
161
162 NodeIterator ni = OrgJcrUtils.getPaymentAccounts(entity);
163 while (ni != null && ni.hasNext()) {
164 Composite cmp = new BankAccountComposite(group, 0, editor, ni.nextNode());
165 cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
166 }
167 parent.layout(true, true);
168 }
169 };
170 formPart.initialize(editor.getManagedForm());
171 editor.getManagedForm().addPart(formPart);
172 }
173 }