use of name.abuchen.portfolio.datatransfer.pdf.PDFInputFile in project portfolio by buchen.
the class ConsorsbankPDFExtractorPDFTest method testErtragsgutschrift6_USD_Freibetrag_ausgeschoepft.
@Test
public void testErtragsgutschrift6_USD_Freibetrag_ausgeschoepft() throws IOException {
ConsorsbankPDFExtractor extractor = new ConsorsbankPDFExtractor(new Client());
List<Exception> errors = new ArrayList<Exception>();
URL url = FileLocator.resolve(getClass().getResource("ConsorsbankErtragsgutschrift6_USD_Freibetrag_ausgeschoepft.pdf"));
PDFInputFile inputFile = new PDFInputFile(new File(url.getPath()));
inputFile.parse();
List<Item> results = extractor.extract(Arrays.asList(inputFile), errors);
assertThat(errors, empty());
assertThat(results.size(), is(2));
// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst().get().getSecurity();
assertThat(security.getWkn(), is("850866"));
assertThat(security.getName(), is("DEERE & CO."));
// check dividend transaction
AccountTransaction t = (AccountTransaction) results.stream().filter(i -> i instanceof TransactionItem).filter(i -> ((AccountTransaction) i.getSubject()).getType() == AccountTransaction.Type.DIVIDENDS).findFirst().get().getSubject();
assertThat(t.getDateTime(), is(LocalDateTime.parse("2015-11-02T00:00")));
assertThat(t.getShares(), is(Values.Share.factorize(300)));
assertThat(t.getMonetaryAmount(), is(Money.of("EUR", 121_36)));
assertThat(t.getUnit(Unit.Type.GROSS_VALUE).get().getForex(), is(Money.of("USD", 180_00)));
// check tax
assertThat(t.getUnitSum(Type.TAX), is(Money.of("EUR", 16_30 + 89 + 24_45)));
}
use of name.abuchen.portfolio.datatransfer.pdf.PDFInputFile in project portfolio by buchen.
the class DkbPDFExtractorPDFTest method testErtragsgutschriftDividende.
@Test
public void testErtragsgutschriftDividende() throws IOException {
DkbPDFExtractor extractor = new DkbPDFExtractor(new Client());
List<Exception> errors = new ArrayList<Exception>();
URL url = FileLocator.resolve(getClass().getResource("DkBErtragsgutschrift2_GBP_Freibetrrag_ausgeschoepft.pdf"));
PDFInputFile inputFile = new PDFInputFile(new File(url.getPath()));
inputFile.parse();
List<Item> results = extractor.extract(Arrays.asList(inputFile), errors);
assertThat(errors, empty());
assertThat(results.size(), is(2));
// check security
Security security = results.stream().filter(i -> i instanceof SecurityItem).findFirst().get().getSecurity();
assertThat(security.getWkn(), is("A0DJ58"));
assertThat(security.getIsin(), is("GB00B02J6398"));
assertThat(security.getName(), is("ADMIRAL GROUP PLC"));
// check transaction
Optional<Item> item = results.stream().filter(i -> i instanceof TransactionItem).findFirst();
assertThat(item.isPresent(), is(true));
assertThat(item.get().getSubject(), instanceOf(AccountTransaction.class));
AccountTransaction transaction = (AccountTransaction) item.get().getSubject();
assertThat(transaction.getType(), is(AccountTransaction.Type.DIVIDENDS));
assertThat(transaction.getSecurity(), is(security));
assertThat(transaction.getCurrencyCode(), is(CurrencyUnit.EUR));
assertThat(transaction.getDateTime(), is(LocalDateTime.parse("2015-10-13T00:00")));
assertThat(transaction.getMonetaryAmount(), is(Money.of("EUR", 227_63L)));
assertThat(transaction.getShares(), is(Values.Share.factorize(450)));
}
use of name.abuchen.portfolio.datatransfer.pdf.PDFInputFile in project portfolio by buchen.
the class ImportPDFHandler method doExecute.
/* package */
void doExecute(MPart part, Shell shell, boolean isLegacyMode) {
Client client = MenuHelper.getActiveClient(part);
if (client == null)
return;
FileDialog fileDialog = new FileDialog(shell, SWT.OPEN | SWT.MULTI);
fileDialog.setText(Messages.PDFImportWizardAssistant);
fileDialog.setFilterNames(new String[] { Messages.PDFImportFilterName });
// $NON-NLS-1$
fileDialog.setFilterExtensions(new String[] { "*.pdf" });
fileDialog.open();
String[] filenames = fileDialog.getFileNames();
if (filenames.length == 0)
return;
List<Extractor.InputFile> files = new ArrayList<>();
for (String filename : filenames) files.add(new PDFInputFile(new File(fileDialog.getFilterPath(), filename)));
IPreferenceStore preferences = ((PortfolioPart) part.getObject()).getPreferenceStore();
try {
IRunnableWithProgress operation = monitor -> {
monitor.beginTask(Messages.PDFImportWizardMsgExtracting, files.size());
for (Extractor.InputFile inputFile : files) {
monitor.setTaskName(inputFile.getName());
try {
((PDFInputFile) inputFile).parse();
} catch (IOException e) {
throw new IllegalArgumentException(MessageFormat.format(Messages.PDFImportErrorParsingDocument, inputFile.getName()), e);
}
monitor.worked(1);
}
// if we just run this async, then the main window on macOS does
// not regain focus and the menus are not usable
new // $NON-NLS-1$
Job(// $NON-NLS-1$
"") {
@Override
protected IStatus run(IProgressMonitor monitor) {
shell.getDisplay().asyncExec(() -> openWizard(shell, client, files, preferences, isLegacyMode));
return Status.OK_STATUS;
}
}.schedule(50);
};
new ProgressMonitorDialog(shell).run(true, true, operation);
} catch (IllegalArgumentException | InvocationTargetException | InterruptedException e) {
PortfolioPlugin.log(e);
String message = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
MessageDialog.openError(shell, Messages.LabelError, message);
}
}
use of name.abuchen.portfolio.datatransfer.pdf.PDFInputFile in project portfolio by buchen.
the class CreateTextFromPDFHandler method execute.
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, @Named(IServiceConstants.ACTIVE_SHELL) Shell shell) throws IOException {
FileDialog fileDialog = new FileDialog(shell, SWT.OPEN | SWT.SINGLE);
fileDialog.setText(Messages.PDFImportDebugTextExtraction);
fileDialog.setFilterNames(new String[] { Messages.PDFImportFilterName });
// $NON-NLS-1$
fileDialog.setFilterExtensions(new String[] { "*.pdf" });
fileDialog.open();
String fileName = fileDialog.getFileName();
if (fileName == null || fileName.isEmpty())
return;
try {
PDFInputFile inputFile = new PDFInputFile(new File(fileDialog.getFilterPath(), fileName));
inputFile.parse();
String text = MessageFormat.format(Messages.PDFImportDebugAuthor, inputFile.getAuthor());
// $NON-NLS-1$
text += "\nPDFBox Version: " + inputFile.getPDFBoxVersion().toString();
// $NON-NLS-1$
text += "\n-----------------------------------------\n";
// CRLF to spac; //$NON-NLS-1$ //$NON-NLS-2$
text += inputFile.getText().replace("\r", "");
new DisplayTextDialog(shell, text).open();
} catch (IOException e) {
PortfolioPlugin.log(e);
MessageDialog.openError(shell, Messages.LabelError, e.getMessage());
}
}
use of name.abuchen.portfolio.datatransfer.pdf.PDFInputFile in project portfolio by buchen.
the class ImportExtractedItemsWizard method assignFilesToExtractors.
private void assignFilesToExtractors(Map<Extractor, List<Extractor.InputFile>> extractor2files) {
List<Extractor.InputFile> unknown = new ArrayList<>();
for (Extractor.InputFile file : files) {
PDFInputFile inputFile = (PDFInputFile) file;
Extractor extractor = PDFImportAssistant.detectBankIdentifier(inputFile, extractors);
if (extractor != null)
extractor2files.computeIfAbsent(extractor, k -> new ArrayList<>()).add(inputFile);
else
unknown.add(inputFile);
}
if (!unknown.isEmpty()) {
Extractor e = new AssistantPDFExtractor(client, new ArrayList<>(extractors));
extractors.add(e);
extractor2files.put(e, unknown);
}
}
Aggregations