PDA

Bekijk Volledige Versie : export facturen van/tot



Age
18/02/15, 15:56
Goedemiddag,

Ik ben op zoek naar een manier om facturen (inkoop in dit geval) te exporteren voor bijvoorbeeld een maand of een jaar. Er is sinds niet zo heel lang geleden een nieuwe bestandsindeling waardoor "ff een dir via ftp downloaden" niet meer werkt.

Heeft iemand hier al eens iets voor gemaakt? Of kent iemand een handig trucje? Ik heb evt ook toegang via SSH dus een tarretje maken via een shellscript kan volgens mij ook maar tot nu toe lukt het me nog niet om bijvoorbeeld alles van 2014 te verzamelen.

Ik hoor graag of iemand hier iets voor heeft of dat het mogelijk toch een te complexe vraag is.

Bij voorbaat dank!

Smashmint
18/02/15, 16:15
Facturen exporteren uit..?

CT0
18/02/15, 16:15
Wat context zou handig zijn, welke pakket gebruik je bijvoorbeeld?

Age
18/02/15, 16:43
Sjonge...strakke actie van mezelf zeg...Zat topics over WeFact te lezen en helemaal vergeten dat hier te noemen :(

Anywayz, het gaat dus om het exporteren van de inkoopfacturen uit WeFact Hosting. Dat stond er in de originele vraag eerst ook bij totdat ik ineens bedacht had mijn vraag helemaal anders te stellen. Het gaat er minimaal om dat alle facturen per jaar gedownload kunnen worden. Dat kan voor verkoopfacturen nu al wel (kon altijd al) maar voor inkoopfacturen dus (nog) niet. Dit gebruik ik met name om mijn jaar archief bij te werken.

Ik hoop dat ik nu wel alles vermeld heb. Zo niet ga ik me nog dieper schamen...

Marin
18/02/15, 17:06
Beheer > Exporteren > + Nieuw Template daar staat inkoopfacturen tussen

systemdeveloper
18/02/15, 17:09
Uhm, een select query op WeFact_CreditInvoice doen?

Age
18/02/15, 18:24
Inderdaad die 2 had ik ook al gevonden maar het gaat niet zozeer om de ingevoerde data maar om de (ingescande) facturen zelf. Die zijn allemaal in pdf beschikbaar maar in allerlei subdirs tegenwoordig. Er is wel een api beschikbaar zag ik net dus ik zal eens kijken of ik daar wat mee kan.

DutchTSE
18/02/15, 19:39
Wij liepen ook keihard tegen dit probleem aan, gaat niet terug gedraaid worden door WeFact dus wij hebben tegen de API aan een script geschreven. Kan hem je wel toesturen, is wel super basic (je moet het 1e factuurnummer en laatste factuurnummer invullen en alles wat ertussen ligt download hij, pakt hij in met zip en de zip kun je downloaden. Werkt alleen als al je inkoopfacturen pdf's zijn).

Laat maar weten of ik hem morgen moet posten (herinner me mocht ik niet meer reageren..).

Age
18/02/15, 20:00
Hallo DutchTSE
Dat zou helemaal geweldig zijn. Ik zoek niks fancy het gaat er alleen om dat ik een nieuw jaar-zipje bij de rest kan voegen als backup.

DutchTSE
19/02/15, 17:26
Aangezien ik geen PHP als bijlage mag toevoegen:

Kopieer de code, zet in php bestand in de map /Pro/. Het script gaat er vanuit dat je crediteurfacturen beginnen met CF<nummer>, dat kun je zelf aanpassen als dat anders is. Als je het bestand opent in je browser dan voer je (van de reeks bestanden die je wilt downloaden) het beginnummer en het eindnummer in. Stel je facturen zijn CF20150001 tot en met CF20150100, dan voer je 20150001 en 20150100 in ;) De tijdelijke bestanden die het script creeert worden in temp/ opgeslagen, die map gooit de cronjob van wefact bij iedere run leeg. Script komt zonder garanties dus je bent zelf verantwoordelijk voor alles :thumbup:

Heb het script nog even aangepast zodat het niet alleen PDF ondersteund maar de extensie ophaalt waarin het bestand staat opgeslagen (werkt met PDF en JPG iig).



<?php
require_once("wefact_api.php");

function zipFilesDownload($file_names,$archive_file_name,$f ile_path){
$zip = new ZipArchive();
if ($zip->open('temp/'.$archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
exit("cannot open <$archive_file_name>\n");

}
foreach($file_names as $files){
$zip->addFile($file_path.$files,$files);

}
$zip->close();


header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=temp/$archive_file_name");
header("Pragma: no-cache");
header("Expires: 0");
readfile("temp/$archive_file_name");
exit;
}
?>



<form method="post" action="">
Van: <input type="text" name="from" value="" /> tot en met: <input type="text" name="to" value="" />

<input type="submit" name="submit" value="Go" />
</form>

<?
if($_POST){

$api = new WeFactAPI();

$factuurnr = $_POST["from"];
$start = $_POST["from"];
$eind = $_POST["to"];

while($factuurnr <= $eind){

$attachmentParams = array(
'CreditInvoiceCode' => 'CF'.$factuurnr,
'Type' => 'creditinvoice'
);

$response = $api->sendRequest('attachment', 'download', $attachmentParams);

$extension = end(explode(".",$response["success"]["0"]));

$decoded = base64_decode ($response["success"]["1"]);
$cfile = fopen ('temp/Crediteurfactuur CF'.$factuurnr.'.'.$extension,'w');
fwrite ($cfile,$decoded);
fclose ($cfile);
$files[] .= "temp/Crediteurfactuur CF".$factuurnr.".".$extension;

$factuurnr++;


}

$fileNames=$files;
$zip_file_name='Crediteurfacturen_'.$start.'_'.$ei nd.'.zip';
$file_path=dirname(__FILE__).'/';

zipFilesDownload($fileNames,$zip_file_name,$file_p ath);

}

?>

Age
22/02/15, 07:52
Ben er mee bezig geweest maar krijg nog geen werkende zip. Heeft vast niks te maken met de 0kb facturen die in /temp komen te staan. Ik puzzel nog even verder. Dank in ieder geval voor de optie om dit te kunnen hergebruiken

Vanaf m'n s4.

DutchTSE
22/02/15, 14:18
Heb je wefact_api.php in dezelfde map staan en de API juist geconfigureerd?

Age
22/02/15, 15:20
Ja hij lijkt ook wat op te halen maar dat zijn files van 0kb. Nog even verder testen straks.

Vanaf m'n s4.

DutchTSE
22/02/15, 19:47
0 KB betekend volgens mij dat hij juist niets ophaalt.. De API haalt de bijlage als base64 binnen en dat schrijf je weg in een bestand. Krijgt hij geen bijlage binnen via de api dan schrijft hij ook niets weg in het bestand. ;)

Age
24/02/15, 23:29
Ik ben nog even flink aan het testen geweest tot ik ineens het licht zag en er achter kwam dat ik een subdir vergeten was bij de url voor de api. Die zit er nu in en nu moet ik alleen nog even zorgen dat ophalen van alle facturen en het zippen goed gaat. Er komen nu ook logregels in het API overzicht in WF.

Hij haalt nu alleen de eerste factuur correct op. Daarna is alles weer 0kb en zijn het files zonder extensie.

Daarnaast is de .zip die ik krijg door win8.1 niet te lezen. De ene .pdf file is wel goed en leesbaar in de /temp dir waar ze neergezet worden. Dus linksom of rechtsom ik heb in ieder geval waar ik naar op zoek was als ik het even factuur voor factuur doe.

Ik zal nog even laten weten als het ook gelukt is met het zippen en om alles op te halen :D Het begin is er!

Age
25/02/15, 01:23
Heb het denk ik gevonden. De eerste keer begint hij netjes met het juiste factuurnummer (dat ik ook opgeef) en komt dan met een goede factuur terug, bijvoorbeeld CF0050. Daarna doet hij $factuurnr++ maar dan verdwijnen de voorloopnullen. Dat gaat mogelijk goed als het begint met een ander getal maar bij mij start het dus met een 0. De 2e factuur probeert hij vervolgens CF51 op te halen en dat lukt niet. Dat moet CF0051 zijn.

Morgen weer een dag, dan even kijken of dat varkentje ff snel te wassen is. Gooooo php :P

Age
25/02/15, 03:15
Zo, werd net wakker en had ineens een goed idee...zie hier wat werkt bij mij. Dit is alleen het stuk na het drukken op de submit button. Geen controle nog op de invoer. Hij doet wel even wat dingetjes opschonen tussendoor zodat er netjes lege files komen op het moment dat er geen attachment beschikbaar is. Werkt goed voor wat ik in wf heb staan namelijk .jpg en .pdf files. Schiet maar wie weet kan ik het nog wat robuuster maken :)

Het zip gedeelte kreeg ik (nog) niet werkend maar dat is voor mij meer een leuk dingetje om misschien nog eens te doen :D

DutchTSE, bedankt voor de voorzet en de gelegenheid om de code te gebruiken!


<?
if($_POST){

$api = new WeFactAPI();
$factuurnr = $_POST["from"];
$start = $_POST["from"];
$eind = $_POST["to"];

while($factuurnr <= $eind){
$response = '';
$decoded = '';
$factuurnr = sprintf('%04d', $factuurnr);
$attachmentParams = array( 'CreditInvoiceCode' => 'CF'.$factuurnr,
'Type' => 'creditinvoice'
);
$response = $api->sendRequest('attachment', 'download', $attachmentParams);

if($response["status"]==='success'){
$decoded = base64_decode ($response["success"]["1"]);
$cfile = fopen ('temp/CF'.$factuurnr."-".$response["success"]["0"],'w');
fwrite ($cfile,$decoded);
fclose ($cfile);
$factuurnr++;

} else {
$cfile = fopen ('temp/CF'.$factuurnr.'-geen-file','w');
fwrite ($cfile);
fclose ($cfile);
$factuurnr++;
}
}
}

?>


PS. mijn excuses voor de triple-post...kon nie slapen dus zat ff niks anders op...