@@ -49,28 +49,7 @@ class Invoice extends Model implements Attachable
4949{
5050 use HasFactory;
5151
52- /**
53- * Allow setting serie on the fly for the generation of the serialNumber
54- */
55- public ?int $ serie = null ;
56-
57- /**
58- * Allow setting prefix on the fly for the generation of the serialNumber
59- */
60- public ?string $ prefix = null ;
61-
62- protected $ fillable = [
63- 'serial_number ' ,
64- 'description ' ,
65- 'seller_information ' ,
66- 'buyer_information ' ,
67- 'state ' ,
68- 'due_at ' ,
69- 'state_set_at ' ,
70- 'tax_type ' ,
71- 'tax_exempt ' ,
72- 'type ' ,
73- ];
52+ protected $ guarded = [];
7453
7554 protected $ casts = [
7655 'type ' => InvoiceType::class,
@@ -88,10 +67,7 @@ public static function booted()
8867 {
8968 static ::creating (function (Invoice $ invoice ) {
9069 if (config ('invoices.serial_number.auto_generate ' )) {
91- $ invoice ->serial_number = $ invoice ->generateSerialNumber (
92- serie: $ invoice ->getSerialNumberSerie (),
93- date: now ()
94- );
70+ $ invoice ->serial_number = $ invoice ->generateSerialNumber ();
9571
9672 $ invoice ->serial_number_details = new ArrayObject (
9773 $ invoice ->parseSerialNumber ()
@@ -171,17 +147,83 @@ public function getLatestSerialNumber(): ?string
171147 return $ latestInvoice ?->serial_number;
172148 }
173149
174- public function getSerialNumberSerie (): ?int
150+ function initSerialNumberDetailst (): static
151+ {
152+ if (!$ this ->serial_number_details ) {
153+ $ this ->serial_number_details = new ArrayObject ();
154+ }
155+ return $ this ;
156+ }
157+
158+ public function setSerialNumberPrefix (string $ value ): static
159+ {
160+ $ this ->initSerialNumberDetailst ();
161+ $ this ->serial_number_details ['prefix ' ] = $ value ;
162+ return $ this ;
163+ }
164+
165+ public function setSerialNumberSerie (int $ value ): static
166+ {
167+ $ this ->initSerialNumberDetailst ();
168+ $ this ->serial_number_details ['serie ' ] = $ value ;
169+ return $ this ;
170+ }
171+
172+ public function setSerialNumberYear (int $ value ): static
173+ {
174+ $ this ->initSerialNumberDetailst ();
175+ $ this ->serial_number_details ['year ' ] = $ value ;
176+ return $ this ;
177+ }
178+
179+ public function setSerialNumberMonth (int $ value ): static
180+ {
181+ $ this ->initSerialNumberDetailst ();
182+ $ this ->serial_number_details ['month ' ] = $ value ;
183+ return $ this ;
184+ }
185+
186+ public function setSerialNumberCount (int $ value ): static
187+ {
188+ $ this ->initSerialNumberDetailst ();
189+ $ this ->serial_number_details ['count ' ] = $ value ;
190+ return $ this ;
191+ }
192+
193+ public function setSerialNumberDate (Carbon $ value ): static
175194 {
176- return $ this ->serie ;
195+ $ this ->initSerialNumberDetailst ();
196+ $ this ->serial_number_details ['year ' ] = (int ) $ value ->format ('Y ' );
197+ $ this ->serial_number_details ['month ' ] = (int ) $ value ->format ('m ' );
198+ return $ this ;
177199 }
178200
179201 public function getSerialNumberPrefix (): ?string
180202 {
181- return $ this ->prefix ?? config ('invoices.serial_number.prefix ' );
203+ return data_get ($ this ->serial_number_details , 'prefix ' , config ('invoices.serial_number.prefix ' ));
204+ }
205+
206+ public function getSerialNumberSerie (): ?int
207+ {
208+ return data_get ($ this ->serial_number_details , 'serie ' );
209+ }
210+
211+ public function getSerialNumberYear (): ?int
212+ {
213+ return data_get ($ this ->serial_number_details , 'year ' );
214+ }
215+
216+ public function getSerialNumberMonth (): ?int
217+ {
218+ return data_get ($ this ->serial_number_details , 'month ' );
219+ }
220+
221+ public function getSerialNumberCount (): ?int
222+ {
223+ return data_get ($ this ->serial_number_details , 'count ' );
182224 }
183225
184- public function generateSerialNumber (int $ serie = null , Carbon $ date = null ): string
226+ public function generateSerialNumber (): string
185227 {
186228 $ generator = new SerialNumberGenerator (prefix: $ this ->getSerialNumberPrefix ());
187229 $ latestSerialNumber = $ this ->getLatestSerialNumber ();
@@ -194,8 +236,9 @@ public function generateSerialNumber(int $serie = null, Carbon $date = null): st
194236 }
195237
196238 return $ generator ->generate (
197- serie: $ serie ,
198- date: $ date ?? now (),
239+ serie: $ this ->getSerialNumberSerie (),
240+ year: $ this ->getSerialNumberYear () ?? now ()->format ('Y ' ),
241+ month: $ this ->getSerialNumberMonth () ?? now ()->format ('m ' ),
199242 count: $ latestCount + 1
200243 );
201244 }
0 commit comments