Skip to content

Commit d9d9bf0

Browse files
authored
Merge pull request #3 from soap/develop
Develop
2 parents 78be6ce + 37c2648 commit d9d9bf0

File tree

4 files changed

+150
-6
lines changed

4 files changed

+150
-6
lines changed

src/Contracts/Generator.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Soap\Laravel\RunningNumbers\Contracts;
4+
5+
interface Generator
6+
{
7+
public function generate(string $name, array $options = []): string;
8+
}

src/Contracts/Presentable.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Soap\Laravel\RunningNumbers\Contracts;
4+
5+
interface Presentable
6+
{
7+
public function format(string $name, string $number): string;
8+
}

src/RunningNumber.php

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@ public static function getTableName()
1616
return self::getTablePrefix().'running_numbers';
1717
}
1818

19+
/**
20+
* @deprecated next version will remove this method, use RunningNumberGenerator::make() instead
21+
*/
1922
public static function generate(string $type, string $prefix, int $length = 3, bool $reset = false, int $resetValue = 1)
2023
{
2124
$runningNumber = RunningNumberKeeper::where('type', $type)
2225
->where('prefix', $prefix)
2326
->first();
2427

2528
if (! $runningNumber) {
26-
$runningNumber = new RunningNumberKeeper();
29+
$runningNumber = new RunningNumberKeeper;
2730
$runningNumber->type = $type;
2831
$runningNumber->prefix = $prefix;
2932
if ($reset) {
@@ -44,13 +47,16 @@ public static function generate(string $type, string $prefix, int $length = 3, b
4447
return $prefix.str_pad($runningNumber->number, $length, '0', STR_PAD_LEFT);
4548
}
4649

50+
/**
51+
* @deprecated next version will remove this method, use RunningNumberGenerator::make() instead
52+
*/
4753
public static function make(string $type, string $prefix, int $length = 3, bool $reset = false, int $resetValue = 1)
4854
{
4955
$runningNumber = RunningNumberKeeper::where('type', $type)
5056
->where('prefix', $prefix)
5157
->first();
5258
if (! $runningNumber) {
53-
$runningNumber = new RunningNumberKeeper();
59+
$runningNumber = new RunningNumberKeeper;
5460
$runningNumber->type = $type;
5561
$runningNumber->prefix = $prefix;
5662
if ($reset) {
@@ -78,7 +84,7 @@ public static function reset(string $type, string $prefix, int $value = 1)
7884
->first();
7985

8086
if (! $runningNumber) {
81-
$runningNumber = new RunningNumberKeeper();
87+
$runningNumber = new RunningNumberKeeper;
8288
$runningNumber->type = $type;
8389
$runningNumber->prefix = $prefix;
8490
$runningNumber->number = $value;
@@ -103,11 +109,51 @@ public static function list(?string $type = null, ?string $prefix = null)
103109
return $query->get()->toArray();
104110
}
105111

106-
public static function delete(string $type, string $prefix)
112+
public static function current(string $type, string $prefix)
107113
{
108-
RunningNumberKeeper::where('type', $type)
114+
$runningNumber = RunningNumberKeeper::where('type', $type)
115+
->where('prefix', $prefix)
116+
->first();
117+
118+
if (! $runningNumber) {
119+
return null;
120+
}
121+
122+
return $runningNumber->number;
123+
}
124+
125+
public static function next(string $type, string $prefix)
126+
{
127+
$runningNumber = RunningNumberKeeper::where('type', $type)
109128
->where('prefix', $prefix)
110-
->delete();
129+
->first();
111130

131+
if (! $runningNumber) {
132+
$runningNumber = new RunningNumberKeeper;
133+
$runningNumber->type = $type;
134+
$runningNumber->prefix = $prefix;
135+
$runningNumber->number = 1;
136+
$runningNumber->save();
137+
} else {
138+
$runningNumber->number += 1;
139+
$runningNumber->save();
140+
}
141+
142+
return $runningNumber->number;
143+
}
144+
145+
public static function delete(string $type, ?string $prefix = null)
146+
{
147+
$query = RunningNumberKeeper::where('type', $type);
148+
if ($prefix) {
149+
$query->where('prefix', $prefix);
150+
}
151+
152+
return $query->delete();
153+
}
154+
155+
public static function flush()
156+
{
157+
return RunningNumberKeeper::truncate();
112158
}
113159
}

src/RunningNumberGenerator.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace Soap\Laravel\RunningNumbers;
4+
5+
use Soap\Laravel\RuningNumbers\RunningNumber;
6+
7+
class RunningNumberGenerator
8+
{
9+
protected $type = 'Default';
10+
11+
protected $prefix;
12+
13+
protected $length = 3;
14+
15+
protected $reset = false;
16+
17+
protected $runningNumber;
18+
19+
protected $format = '{PREFIX}-{NUMBER}';
20+
21+
public static function make()
22+
{
23+
return new static(self::class);
24+
}
25+
26+
public function type($type)
27+
{
28+
$this->type = $type;
29+
30+
return $this;
31+
}
32+
33+
public function prefix($prefix)
34+
{
35+
$this->prefix = $prefix;
36+
37+
return $this;
38+
}
39+
40+
public function length($length)
41+
{
42+
$this->length = $length;
43+
44+
return $this;
45+
}
46+
47+
public function reset($value = 0)
48+
{
49+
$this->reset = true;
50+
$this->runningNumber = $value;
51+
52+
return $this;
53+
}
54+
55+
/**
56+
* @todo validate format tokens
57+
*/
58+
public function format($format)
59+
{
60+
$this->format = $format;
61+
62+
return $this;
63+
}
64+
65+
public function generate()
66+
{
67+
if ($this->reset) {
68+
RunningNumber::reset($this->type, $this->prefix, $this->runningNumber);
69+
}
70+
71+
$this->runningNumber = RuningNumber::next($this->type, $this->prefix);
72+
73+
$paddedNumber = str_pad($this->runningNumber, $this->length, '0', STR_PAD_LEFT);
74+
75+
return str_replace([
76+
'{TYPE}', '{PREFIX}', '{NUMBER}',
77+
],
78+
[$this->type, $this->prefix, $paddedNumber],
79+
$this->format
80+
);
81+
}
82+
}

0 commit comments

Comments
 (0)