-
Notifications
You must be signed in to change notification settings - Fork 0
/
EdifactExportPricat.java
executable file
·411 lines (304 loc) · 16.1 KB
/
EdifactExportPricat.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pl.vo.integration.edifact;
import java.io.IOException;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.milyn.edi.unedifact.d96a.D96AInterchangeFactory;
import org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup3;
import org.milyn.edi.unedifact.d96a.PRICAT.Pricat;
import org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup16;
import org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2;
import org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup33;
import org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup35;
import org.milyn.edi.unedifact.d96a.common.BeginningOfMessage;
import org.milyn.edi.unedifact.d96a.common.DateTimePeriod;
import org.milyn.edi.unedifact.d96a.common.DutyTaxFeeDetails;
import org.milyn.edi.unedifact.d96a.common.ItemDescription;
import org.milyn.edi.unedifact.d96a.common.LineItem;
import org.milyn.edi.unedifact.d96a.common.Measurements;
import org.milyn.edi.unedifact.d96a.common.NameAndAddress;
import org.milyn.edi.unedifact.d96a.common.ProductGroupInformation;
import org.milyn.edi.unedifact.d96a.common.Reference;
import org.milyn.edi.unedifact.d96a.common.field.DateTimePeriodC507;
import org.milyn.edi.unedifact.d96a.common.field.DocumentMessageNameC002;
import org.milyn.edi.unedifact.d96a.common.field.DutyTaxFeeDetailC243;
import org.milyn.edi.unedifact.d96a.common.field.ReferenceC506;
import org.milyn.edi.unedifact.d96a.common.field.ItemDescriptionC273;
import org.milyn.edi.unedifact.d96a.common.field.PartyIdentificationDetailsC082;
import org.milyn.edi.unedifact.d96a.common.field.PartyNameC080;
import org.milyn.edi.unedifact.d96a.common.field.ProductGroupC288;
import org.milyn.edi.unedifact.d96a.common.field.ValueRangeC174;
import org.milyn.edisax.model.internal.Delimiters;
import org.milyn.smooks.edi.unedifact.model.r41.UNB41;
import org.milyn.smooks.edi.unedifact.model.r41.UNEdifactInterchange41;
import org.milyn.smooks.edi.unedifact.model.r41.UNEdifactMessage41;
import org.milyn.smooks.edi.unedifact.model.r41.UNH41;
import org.milyn.smooks.edi.unedifact.model.r41.UNT41;
import org.milyn.smooks.edi.unedifact.model.r41.UNZ41;
import org.milyn.smooks.edi.unedifact.model.r41.types.DateTime;
import org.milyn.smooks.edi.unedifact.model.r41.types.MessageIdentifier;
import org.milyn.smooks.edi.unedifact.model.r41.types.Party;
import org.milyn.smooks.edi.unedifact.model.r41.types.SyntaxIdentifier;
import pl.vo.VOConsts;
import pl.vo.company.model.Company;
import pl.vo.documents.model.Document;
import pl.vo.documents.model.DocumentItem;
import pl.vo.exceptions.VOWrongDataException;
import pl.vo.organisation.model.OrganisationUnit;
/**
*
* @author k.skowronski
*/
public class EdifactExportPricat {
public static String MESSAGE_TYPE_PRICAT = "PRICAT";
D96AInterchangeFactory factory;
Document document;
Date messageCreationDate = new Date();
Long ti = new Long(messageCreationDate.getTime());
String messageRef = ti.toString();
String messageType = "";
UNEdifactInterchange41 interchange;
UNEdifactMessage41 message;
public String generate(Document document) throws VOWrongDataException {
this.document = document;
factory = EdifactProvider.getInterchangeFactory();
interchange = new UNEdifactInterchange41();
message = new UNEdifactMessage41();
messageType = "PRICAT";
generateCommonFields();
generatePricat();
StringWriter ediOutStream = new StringWriter();
interchange.setInterchangeDelimiters(new Delimiters());
interchange.getInterchangeDelimiters().setComponent(":");
interchange.getInterchangeDelimiters().setDecimalSeparator(".");
interchange.getInterchangeDelimiters().setEscape("?");
interchange.getInterchangeDelimiters().setField("+");
interchange.getInterchangeDelimiters().setFieldRepeat(null);
interchange.getInterchangeDelimiters().setSegment("\n");
try {
factory.toUNEdifact(interchange, ediOutStream);
} catch (IOException ioe) {
throw new VOWrongDataException("Błąd generacji edifact" + ioe.getLocalizedMessage());
}
System.out.println(ediOutStream.toString());
String re = ediOutStream.toString();
return ediOutStream.toString();
}
private void generateCommonFields() {
UNB41 unb41 = createPartiesUNB41();
interchange.setInterchangeHeader(unb41);
message.setInterchangeHeader(unb41);
}
private UNB41 createPartiesUNB41() {
UNB41 unb41 = new UNB41();
unb41.setDate(new DateTime());
// recipent
Party partyRec = new Party();
unb41.setRecipient(partyRec);
partyRec.setCodeQualifier("14");
partyRec.setId(document.getSupplier().getNip());
// sender
Party partySender = new Party();
unb41.setSender(partySender);
partySender.setCodeQualifier("14");
partySender.setId(VOConsts.NIP_VENDI);
//
SyntaxIdentifier sid = new SyntaxIdentifier();
sid.setId("UNOC");
sid.setVersionNum("3");
unb41.setSyntaxIdentifier(sid);
// create datetime of message
DateTime dm = new DateTime();
dm.setDate(messageRef);
unb41.setDate(EdifactProvider.dateToDateTime(messageCreationDate));
unb41.setControlRef(messageRef);
unb41.setApplicationRef("VENDI_APP_PRICAT");
unb41.setTestIndicator("PRICAT");
unb41.setAgreementId("AGGRID");
unb41.setProcessingPriorityCode("1");
unb41.setAckRequest("1");
return unb41;
}
public UNH41 createUNH41() {
UNH41 unh41 = new UNH41();
unh41.setMessageIdentifier(new MessageIdentifier());
unh41.getMessageIdentifier().setAssociationAssignedCode("PRICAT");
unh41.getMessageIdentifier().setControllingAgencyCode("UN");
unh41.getMessageIdentifier().setId(messageType);
unh41.getMessageIdentifier().setReleaseNum("96A");
unh41.getMessageIdentifier().setVersionNum("D");
unh41.setMessageRefNum("1");
return unh41;
}
public void generatePricat() throws VOWrongDataException {
UNH41 unh41 = createUNH41();
message.setMessageHeader(unh41);
// create order message
Pricat pricatMsg = new Pricat();
message.setMessage(pricatMsg);
interchange.setMessages(new ArrayList<UNEdifactMessage41>());
interchange.getMessages().add(message);
// order number
BeginningOfMessage bgm = new BeginningOfMessage();
bgm.setDocumentMessageNumber(document.getOwnNumber());
pricatMsg.setBeginningOfMessage(bgm);
bgm.setDocumentMessageName(new DocumentMessageNameC002());
bgm.getDocumentMessageName().setDocumentMessageNameCoded("9 - ks02");
// data obowiazywania cennika
pricatMsg.setSegmentGroup2( new ArrayList<org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2>() );
org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2 sg2 = new org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2();
sg2.setSegmentGroup3( new ArrayList<org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup3>() );
SegmentGroup3 sg3 = new SegmentGroup3();
List <DateTimePeriod> period = new ArrayList<DateTimePeriod>();
if ( document.getValidFrom() == null )
throw new VOWrongDataException("Błąd EEP-214 - cennik nie ma początku terminu obowiązywania");
if ( document.getValidTill() == null)
throw new VOWrongDataException("Błąd EEP-216 - cennik nie ma daty obowiązywania");
period.add(EdifactProvider.dateToDateTimePeriod( document.getValidFrom(), "157"));
period.add(EdifactProvider.dateToDateTimePeriod( document.getValidTill(), "21E"));
sg3.setDateTimePeriod(period);
sg2.getSegmentGroup3().add(sg3);
pricatMsg.getSegmentGroup2().add(sg2);
// NAD
org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2 sg2By = new org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2();
/* Cenniik nie ma pola Client
NameAndAddress naaBy = createNadFromOrgUnit("BY", document.getClient());
sg2By.setNameAndAddress(naaBy);
pricatMsg.getSegmentGroup2().add(sg2By);
*/
// dostawa - SU
org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2 sg2Su = new org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2();
NameAndAddress nadSu = createNAD("SU", document.getSupplier());
sg2Su.setNameAndAddress(nadSu);
pricatMsg.getSegmentGroup2().add(sg2Su);
// obiekt - DP delivery party
/** Klaud- cennik nie ma jednostki org wiec nie mozna dodac tych pol
org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2 sg2Dp = new org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup2();
NameAndAddress nadDp = createNadFromOrgUnit("BY", document.getClient());
sg2Dp.setNameAndAddress(nadDp);
pricatMsg.getSegmentGroup2().add(sg2Dp);
* */
// create Seg 16
pricatMsg.setSegmentGroup16(new ArrayList<SegmentGroup16>());
createLineItemsOrder( pricatMsg.getSegmentGroup16() );
//REF
// segment RFF - odniesienie do zamowienia
//Document docOrder = document.getSourceDocument();
//if (docOrder == null) {
// throw new VOWrongDataException("Błąd EOE371 - dokument DPZ nie ma powiązanego dokumentu zamówienia");
//}
/*org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup1 sg1 = new org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup1();
sg1.setReference(new Reference());
sg1.getReference().setReference(new ReferenceC506());
sg1.getReference().getReference().setReferenceNumber(null);
sg1.getReference().getReference().setReferenceQualifier("ON"); // kod "ON" oznacza numer zamowienia
pricatMsg.setSegmentGroup1(new ArrayList<org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup1>());
pricatMsg.getSegmentGroup1().add(sg1);*/
/* pricatMsg.setDateTimePeriod(new ArrayList<DateTimePeriod>());
insertDateTime(pricatMsg.getDateTimePeriod());
pricatMsg.setSegmentGroup2(new ArrayList<SegmentGroup2>());
createParties(pricatMsg.getSegmentGroup2());
// create items
pricatMsg.setSegmentGroup25(new ArrayList<SegmentGroup25>());
createLineItemsOrder(orderMsg.getSegmentGroup25());
// create section control
SectionControl sc = new SectionControl();
sc.setSectionIdentification("S");
orderMsg.setSectionControl(sc);*/
message.setMessageTrailer(new UNT41());
message.getMessageTrailer().setSegmentCount(1);
message.getMessageTrailer().setMessageRefNum(messageRef);
// trailer
//message.setGroupTrailer( new UNE41());
//message.getGroupTrailer().setControlCount(1);
//message.getGroupTrailer().setGroupRef(messageRef);
interchange.setInterchangeTrailer(new UNZ41());
interchange.getInterchangeTrailer().setControlCount(1);
interchange.getInterchangeTrailer().setControlRef(messageRef);
}
private void createLineItemsOrder(List<SegmentGroup16> list) {
BigDecimal lineItemNumber = new BigDecimal(1);
for (DocumentItem item : document.getItems()) {
SegmentGroup16 sg16 = new SegmentGroup16();
list.add(sg16);
sg16.setSegmentGroup33( new ArrayList<org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup33>() );
SegmentGroup33 sg33 = new SegmentGroup33();
sg16.getSegmentGroup33().add(sg33);
//////SG16
//DTM
/*List <DateTimePeriod> dtmList = new ArrayList<DateTimePeriod>();
dtmList.add(EdifactProvider.dateToDateTimePeriod(document.getDateOperation(), "137"));
sg16.setDateTimePeriod(dtmList);*/
//PGI
ProductGroupInformation pgi = new ProductGroupInformation();
ProductGroupC288 pgC288 = new ProductGroupC288();
pgC288.setProductGroup("TEST - TODO PGI");
pgi.setProductGroup(pgC288);
pgi.setProductGroupTypeCoded("11");
sg16.setProductGroupInformation(pgi);
//////SG33
//LIN - linia
LineItem li = new LineItem();
li.setLineItemNumber(lineItemNumber);
sg33.setLineItem(li);
lineItemNumber = lineItemNumber.add(new BigDecimal(1));
//IMD
List <ItemDescription> imdList = new ArrayList<ItemDescription>();
sg33.setItemDescription(imdList);
ItemDescriptionC273 itemDescC277 = new ItemDescriptionC273();
itemDescC277.setItemDescriptionIdentification( item.getProduct().getName() );
itemDescC277.setCodeListQualifier(item.getProduct().getIndexNumber());
ItemDescription itemDesc = new ItemDescription();
itemDesc.setItemDescription(itemDescC277);
imdList.add(itemDesc);
//MEA
List<Measurements> mList = new ArrayList<Measurements>();
Measurements m = new Measurements();
mList.add(m);
ValueRangeC174 vrC174 = new ValueRangeC174();
vrC174.setMeasureUnitQualifier(item.getProduct().getMeasureUnit().getAbbr());
vrC174.setMeasurementValue(item.getUnitPriceNet());
m.setValueRange(vrC174);
m.setMeasurementApplicationQualifier("AAI");
sg33.setMeasurements(mList);
//SG35
sg33.setSegmentGroup35( new ArrayList<org.milyn.edi.unedifact.d96a.PRICAT.SegmentGroup35>() );
SegmentGroup35 sg35 = new SegmentGroup35();
DutyTaxFeeDetails dTax = new DutyTaxFeeDetails();
DutyTaxFeeDetailC243 dTaxC243 = new DutyTaxFeeDetailC243();
dTaxC243.setDutyTaxFeeRate(item.getProduct().getTaxRate().toString());
dTax.setDutyTaxFeeDetail(dTaxC243);
dTax.setDutyTaxFeeFunctionQualifier("AAI");
sg35.setDutyTaxFeeDetails(dTax);
sg33.getSegmentGroup35().add(sg35);
}
}
private NameAndAddress createNAD(String partyQualifier, Company company) {
NameAndAddress nad = new NameAndAddress();
nad.setPartyQualifier(partyQualifier);
PartyIdentificationDetailsC082 pidBy = new PartyIdentificationDetailsC082();
pidBy.setPartyIdIdentification(company.getNip());
nad.setPartyIdentificationDetails(pidBy);
nad.setPartyName(new PartyNameC080());
nad.getPartyName().setPartyName1(company.getName());
return nad;
}
private NameAndAddress createNadFromOrgUnit(String partyQualifier, Company orgUnit)
{
NameAndAddress nad = new NameAndAddress();
nad.setPartyQualifier(partyQualifier);
nad.setPartyIdentificationDetails(new PartyIdentificationDetailsC082());
// KLAUD - Cennik nie ma jednostki org nad.getPartyIdentificationDetails().setPartyIdIdentification(orgUnit.getNip());
nad.setPartyName(new PartyNameC080());
nad.getPartyName().setPartyName1(orgUnit.getName());
return nad;
}
}