1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

support processing different delimiters

This commit is contained in:
David Bomba 2023-03-04 10:48:42 +11:00
parent 95c7ce2294
commit 169f65ddb3
3 changed files with 89 additions and 109 deletions

1
.gitignore vendored
View File

@ -36,3 +36,4 @@ public/test.pdf
public/storage/test.pdf public/storage/test.pdf
/Modules /Modules
_ide_helper_models.php _ide_helper_models.php
_ide_helper.php

View File

@ -4,7 +4,7 @@
/** /**
* A helper file for Laravel, to provide autocomplete information to your IDE * A helper file for Laravel, to provide autocomplete information to your IDE
* Generated for Laravel 9.52.4. * Generated for Laravel 9.52.0.
* *
* This file should not be included in your code, only analyzed by your IDE! * This file should not be included in your code, only analyzed by your IDE!
* *
@ -4193,7 +4193,7 @@
*/ */
public static function lock($name, $seconds = 0, $owner = null) public static function lock($name, $seconds = 0, $owner = null)
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->lock($name, $seconds, $owner); return $instance->lock($name, $seconds, $owner);
} }
/** /**
@ -4206,7 +4206,7 @@
*/ */
public static function restoreLock($name, $owner) public static function restoreLock($name, $owner)
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->restoreLock($name, $owner); return $instance->restoreLock($name, $owner);
} }
/** /**
@ -4217,65 +4217,30 @@
*/ */
public static function flush() public static function flush()
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->flush(); return $instance->flush();
} }
/** /**
* Get the Redis connection instance. * Get the Filesystem instance.
* *
* @return \Illuminate\Redis\Connections\Connection * @return \Illuminate\Filesystem\Filesystem
* @static * @static
*/ */
public static function connection() public static function getFilesystem()
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->connection(); return $instance->getFilesystem();
} }
/** /**
* Get the Redis connection instance that should be used to manage locks. * Get the working directory of the cache.
* *
* @return \Illuminate\Redis\Connections\Connection * @return string
* @static * @static
*/ */
public static function lockConnection() public static function getDirectory()
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->lockConnection(); return $instance->getDirectory();
}
/**
* Specify the name of the connection that should be used to store data.
*
* @param string $connection
* @return void
* @static
*/
public static function setConnection($connection)
{
/** @var \Illuminate\Cache\RedisStore $instance */
$instance->setConnection($connection);
}
/**
* Specify the name of the connection that should be used to manage locks.
*
* @param string $connection
* @return \Illuminate\Cache\RedisStore
* @static
*/
public static function setLockConnection($connection)
{
/** @var \Illuminate\Cache\RedisStore $instance */
return $instance->setLockConnection($connection);
}
/**
* Get the Redis database instance.
*
* @return \Illuminate\Contracts\Redis\Factory
* @static
*/
public static function getRedis()
{
/** @var \Illuminate\Cache\RedisStore $instance */
return $instance->getRedis();
} }
/** /**
* Get the cache key prefix. * Get the cache key prefix.
@ -4285,20 +4250,8 @@
*/ */
public static function getPrefix() public static function getPrefix()
{ {
/** @var \Illuminate\Cache\RedisStore $instance */ /** @var \Illuminate\Cache\FileStore $instance */
return $instance->getPrefix(); return $instance->getPrefix();
}
/**
* Set the cache key prefix.
*
* @param string $prefix
* @return void
* @static
*/
public static function setPrefix($prefix)
{
/** @var \Illuminate\Cache\RedisStore $instance */
$instance->setPrefix($prefix);
} }
} }
@ -9901,44 +9854,45 @@
return $instance->setConnectionName($name); return $instance->setConnectionName($name);
} }
/** /**
* Migrate the delayed jobs that are ready to the regular queue. * Release a reserved job back onto the queue after (n) seconds.
* *
* @param string $from * @param string $queue
* @param string $to * @param \Illuminate\Queue\Jobs\DatabaseJobRecord $job
* @param int $limit * @param int $delay
* @return array * @return mixed
* @static * @static
*/ */
public static function migrateExpiredJobs($from, $to) public static function release($queue, $job, $delay)
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->migrateExpiredJobs($from, $to); return $instance->release($queue, $job, $delay);
} }
/** /**
* Delete a reserved job from the queue. * Delete a reserved job from the queue.
* *
* @param string $queue * @param string $queue
* @param \Illuminate\Queue\Jobs\RedisJob $job * @param string $id
* @return void * @return void
* @throws \Throwable
* @static * @static
*/ */
public static function deleteReserved($queue, $job) public static function deleteReserved($queue, $id)
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
$instance->deleteReserved($queue, $job); $instance->deleteReserved($queue, $id);
} }
/** /**
* Delete a reserved job from the reserved queue and release it. * Delete a reserved job from the reserved queue and release it.
* *
* @param string $queue * @param string $queue
* @param \Illuminate\Queue\Jobs\RedisJob $job * @param \Illuminate\Queue\Jobs\DatabaseJob $job
* @param int $delay * @param int $delay
* @return void * @return void
* @static * @static
*/ */
public static function deleteAndRelease($queue, $job, $delay) public static function deleteAndRelease($queue, $job, $delay)
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
$instance->deleteAndRelease($queue, $job, $delay); $instance->deleteAndRelease($queue, $job, $delay);
} }
/** /**
@ -9950,7 +9904,7 @@
*/ */
public static function clear($queue) public static function clear($queue)
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->clear($queue); return $instance->clear($queue);
} }
/** /**
@ -9962,30 +9916,19 @@
*/ */
public static function getQueue($queue) public static function getQueue($queue)
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->getQueue($queue); return $instance->getQueue($queue);
} }
/** /**
* Get the connection for the queue. * Get the underlying database instance.
* *
* @return \Illuminate\Redis\Connections\Connection * @return \Illuminate\Database\Connection
* @static * @static
*/ */
public static function getConnection() public static function getDatabase()
{ {
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->getConnection(); return $instance->getDatabase();
}
/**
* Get the underlying Redis instance.
*
* @return \Illuminate\Contracts\Redis\Factory
* @static
*/
public static function getRedis()
{
/** @var \Illuminate\Queue\RedisQueue $instance */
return $instance->getRedis();
} }
/** /**
* Get the backoff for an object-based queue handler. * Get the backoff for an object-based queue handler.
@ -9996,7 +9939,7 @@
*/ */
public static function getJobBackoff($job) public static function getJobBackoff($job)
{ //Method inherited from \Illuminate\Queue\Queue { //Method inherited from \Illuminate\Queue\Queue
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->getJobBackoff($job); return $instance->getJobBackoff($job);
} }
/** /**
@ -10008,7 +9951,7 @@
*/ */
public static function getJobExpiration($job) public static function getJobExpiration($job)
{ //Method inherited from \Illuminate\Queue\Queue { //Method inherited from \Illuminate\Queue\Queue
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->getJobExpiration($job); return $instance->getJobExpiration($job);
} }
/** /**
@ -10020,7 +9963,7 @@
*/ */
public static function createPayloadUsing($callback) public static function createPayloadUsing($callback)
{ //Method inherited from \Illuminate\Queue\Queue { //Method inherited from \Illuminate\Queue\Queue
\Illuminate\Queue\RedisQueue::createPayloadUsing($callback); \Illuminate\Queue\DatabaseQueue::createPayloadUsing($callback);
} }
/** /**
* Get the container instance being used by the connection. * Get the container instance being used by the connection.
@ -10030,7 +9973,7 @@
*/ */
public static function getContainer() public static function getContainer()
{ //Method inherited from \Illuminate\Queue\Queue { //Method inherited from \Illuminate\Queue\Queue
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
return $instance->getContainer(); return $instance->getContainer();
} }
/** /**
@ -10042,7 +9985,7 @@
*/ */
public static function setContainer($container) public static function setContainer($container)
{ //Method inherited from \Illuminate\Queue\Queue { //Method inherited from \Illuminate\Queue\Queue
/** @var \Illuminate\Queue\RedisQueue $instance */ /** @var \Illuminate\Queue\DatabaseQueue $instance */
$instance->setContainer($container); $instance->setContainer($container);
} }
@ -10860,12 +10803,12 @@
* Clones a request and overrides some of its parameters. * Clones a request and overrides some of its parameters.
* *
* @return static * @return static
* @param array|null $query The GET parameters * @param array $query The GET parameters
* @param array|null $request The POST parameters * @param array $request The POST parameters
* @param array|null $attributes The request attributes (parameters parsed from the PATH_INFO, ...) * @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
* @param array|null $cookies The COOKIE parameters * @param array $cookies The COOKIE parameters
* @param array|null $files The FILES parameters * @param array $files The FILES parameters
* @param array|null $server The SERVER parameters * @param array $server The SERVER parameters
* @static * @static
*/ */
public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null) public static function duplicate($query = null, $request = null, $attributes = null, $cookies = null, $files = null, $server = null)
@ -17854,6 +17797,25 @@
/** /**
* *
* *
* @method static void createSubscription(array|string $channels, \Closure $callback, string $method = 'subscribe')
* @method static \Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder funnel(string $name)
* @method static \Illuminate\Redis\Limiters\DurationLimiterBuilder throttle(string $name)
* @method static mixed client()
* @method static void subscribe(array|string $channels, \Closure $callback)
* @method static void psubscribe(array|string $channels, \Closure $callback)
* @method static mixed command(string $method, array $parameters = [])
* @method static void listen(\Closure $callback)
* @method static string|null getName()
* @method static \Illuminate\Redis\Connections\Connection setName(string $name)
* @method static \Illuminate\Contracts\Events\Dispatcher getEventDispatcher()
* @method static void setEventDispatcher(\Illuminate\Contracts\Events\Dispatcher $events)
* @method static void unsetEventDispatcher()
* @method static void macro(string $name, object|callable $macro)
* @method static void mixin(object $mixin, bool $replace = true)
* @method static bool hasMacro(string $name)
* @method static void flushMacros()
* @method static mixed macroCall(string $method, array $parameters)
* @see \Illuminate\Redis\RedisManager
*/ */
class Redis { class Redis {
/** /**

View File

@ -93,7 +93,10 @@ class BaseImport
$csv = base64_decode($base64_encoded_csv); $csv = base64_decode($base64_encoded_csv);
$csv = Reader::createFromString($csv); $csv = Reader::createFromString($csv);
$csvdelimiter = self::detectDelimiter($csv);
nlog("delmiter = {$csvdelimiter}");
$csv->setDelimiter($csvdelimiter);
$stmt = new Statement(); $stmt = new Statement();
$data = iterator_to_array($stmt->process($csv)); $data = iterator_to_array($stmt->process($csv));
@ -118,6 +121,20 @@ class BaseImport
return $data; return $data;
} }
public function detectDelimiter($csvfile)
{
$delimiters = [',', '.', ';'];
$bestDelimiter = ' ';
$count = 0;
foreach ($delimiters as $delimiter) {
if (substr_count($csvfile, $delimiter) > $count) {
$count = substr_count($csvfile, $delimiter);
$bestDelimiter = $delimiter;
}
}
return $bestDelimiter;
}
public function mapCSVHeaderToKeys($csvData) public function mapCSVHeaderToKeys($csvData)
{ {
$keys = array_shift($csvData); $keys = array_shift($csvData);
@ -619,8 +636,7 @@ class BaseImport
public function preTransform(array $data, $entity_type) public function preTransform(array $data, $entity_type)
{ {
//sort the array by key
// $keys = $this->column_map[$entity_type];
$keys = array_shift($data); $keys = array_shift($data);
ksort($keys); ksort($keys);
@ -643,9 +659,10 @@ class BaseImport
//sort the array by key //sort the array by key
$keys = $this->column_map[$entity_type]; $keys = $this->column_map[$entity_type];
ksort($keys); ksort($keys);
nlog($keys);
$data = array_map(function ($row) use ($keys) { $data = array_map(function ($row) use ($keys) {
nlog($row);
$row_count = count($row); $row_count = count($row);
$key_count = count($keys); $key_count = count($keys);