Skip to content
This repository was archived by the owner on Nov 23, 2024. It is now read-only.

Commit 911e570

Browse files
committed
Add personal address to Pigna notebook registrations
1 parent dbbf9af commit 911e570

7 files changed

+135
-16
lines changed

sql/database-create.sql

+6-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
-- https://www.phpmyadmin.net/
44
--
55
-- Host: db
6-
-- Generation Time: Feb 21, 2020 at 09:22 PM
6+
-- Generation Time: May 04, 2020 at 04:34 PM
77
-- Server version: 5.7.28
88
-- PHP Version: 7.2.22
99

@@ -72,6 +72,10 @@ CREATE TABLE `PignaNotebookRegistrations` (
7272
`SchoolCAP` char(5) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
7373
`SchoolCity` varchar(64) NOT NULL,
7474
`SchoolProvince` varchar(32) NOT NULL,
75+
`PersonalAddress` varchar(512) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
76+
`PersonalCAP` char(5) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
77+
`PersonalCity` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
78+
`PersonalProvince` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
7579
`Phone` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
7680
`RegisteredOn` datetime NOT NULL
7781
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Registrations for Pigna notebook deliveries 2020';
@@ -170,5 +174,5 @@ ALTER TABLE `Emails`
170174
-- Constraints for table `PignaNotebookRegistrations`
171175
--
172176
ALTER TABLE `PignaNotebookRegistrations`
173-
ADD CONSTRAINT `PignaNotebookRegistration_RegistrationIDs` FOREIGN KEY (`RegistrationID`) REFERENCES `Registrations` (`ID`);
177+
ADD CONSTRAINT `PignaNotebookRegistrations_RegistrationIDs` FOREIGN KEY (`RegistrationID`) REFERENCES `Registrations` (`ID`);
174178
COMMIT;

sql/update-v0.8-v0.81.sql

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE `PignaNotebookRegistrations` ADD `PersonalAddress` VARCHAR(512) CHARACTER SET latin1 COLLATE latin1_general_ci AFTER `SchoolProvince`, ADD `PersonalCAP` CHAR(5) CHARACTER SET latin1 COLLATE latin1_general_ci AFTER `PersonalAddress`, ADD `PersonalCity` VARCHAR(64) CHARACTER SET latin1 COLLATE latin1_general_ci AFTER `PersonalCAP`, ADD `PersonalProvince` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_general_ci AFTER `PersonalCity`;

src/Web/Web/Controllers/DashboardController.cs

+36-14
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,23 @@ public async Task<IActionResult> ShowPignaNotebooksRegistration() {
245245
var registration = await (from reg in Database.PignaNotebookRegistrations
246246
where reg.RegistrationId == userId.Value
247247
select reg).SingleOrDefaultAsync();
248-
if(registration != null) {
248+
if(registration != null && registration.IsPersonalAddressComplete()) {
249249
return View("PignaRegistrationConfirmation");
250250
}
251251

252252
return View("PignaRegistration", new PignaRegistrationInputModel {
253-
Email = emails.FirstOrDefault(e => e.IsPrimary)?.Address
253+
Email = registration?.Email ?? emails.FirstOrDefault(e => e.IsPrimary)?.Address,
254+
MeccanographicCode = registration?.MeccanographicCode,
255+
SchoolName = registration?.SchoolName,
256+
SchoolAddress = registration?.SchoolAddress,
257+
SchoolCap = registration?.SchoolCap,
258+
SchoolCity = registration?.SchoolCity,
259+
SchoolProvince = registration?.SchoolProvince,
260+
PersonalAddress = registration?.PersonalAddress,
261+
PersonalCap = registration?.PersonalCap,
262+
PersonalCity = registration?.PersonalCity,
263+
PersonalProvince = registration?.PersonalProvince,
264+
PhoneNumber = registration?.PhoneNumber
254265
});
255266
}
256267

@@ -264,18 +275,29 @@ [FromForm] PignaRegistrationInputModel input
264275

265276
Logger.LogInformation("Registering user {0}", input.Email);
266277

267-
Database.PignaNotebookRegistrations.Add(new PignaNotebookRegistration {
268-
RegistrationId = GetUserId().Value,
269-
Email = input.Email,
270-
MeccanographicCode = input.MeccanographicCode,
271-
SchoolName = input.SchoolName,
272-
SchoolAddress = input.SchoolAddress,
273-
SchoolCap = input.SchoolCap,
274-
SchoolCity = input.SchoolCity,
275-
SchoolProvince = input.SchoolProvince,
276-
PhoneNumber = input.PhoneNumber,
277-
RegisteredOn = DateTime.UtcNow
278-
});
278+
var id = GetUserId().Value;
279+
var user = await Database.PignaNotebookRegistrations.Where(r => r.RegistrationId == id).SingleOrDefaultAsync();
280+
if(user == null) {
281+
user = new PignaNotebookRegistration {
282+
RegistrationId = id
283+
};
284+
Database.PignaNotebookRegistrations.Add(user);
285+
}
286+
287+
user.Email = input.Email;
288+
user.MeccanographicCode = input.MeccanographicCode;
289+
user.SchoolName = input.SchoolName;
290+
user.SchoolAddress = input.SchoolAddress;
291+
user.SchoolCap = input.SchoolCap;
292+
user.SchoolCity = input.SchoolCity;
293+
user.SchoolProvince = input.SchoolProvince;
294+
user.PersonalAddress = input.PersonalAddress;
295+
user.PersonalCap = input.PersonalCap;
296+
user.PersonalCity = input.PersonalCity;
297+
user.PersonalProvince = input.PersonalProvince;
298+
user.PhoneNumber = input.PhoneNumber;
299+
user.RegisteredOn = DateTime.UtcNow;
300+
279301
if(await Database.SaveChangesAsync() != 1) {
280302
Logger.LogError("Failed to write to database, changes != 1");
281303
}

src/Web/Web/Data/DataExtensions.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
namespace CodeMooc.Web.Data {
7+
public static class DataExtensions {
8+
9+
public static bool IsPersonalAddressComplete(this PignaNotebookRegistration r) {
10+
return (
11+
!string.IsNullOrEmpty(r.PersonalAddress) &&
12+
!string.IsNullOrEmpty(r.PersonalCap) &&
13+
!string.IsNullOrEmpty(r.PersonalCity) &&
14+
!string.IsNullOrEmpty(r.PersonalProvince)
15+
);
16+
}
17+
18+
}
19+
}

src/Web/Web/Data/PignaNotebookRegistration.cs

+13
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@ public class PignaNotebookRegistration {
3535
[MaxLength(32)]
3636
public string SchoolProvince { get; set; }
3737

38+
[MaxLength(512)]
39+
public string PersonalAddress { get; set; }
40+
41+
[Column("PersonalCAP")]
42+
[MaxLength(5)]
43+
public string PersonalCap { get; set; }
44+
45+
[MaxLength(64)]
46+
public string PersonalCity { get; set; }
47+
48+
[MaxLength(32)]
49+
public string PersonalProvince { get; set; }
50+
3851
[Column("Phone")]
3952
[MaxLength(32)]
4053
public string PhoneNumber { get; set; }

src/Web/Web/InputModel/PignaRegistrationInputModel.cs

+22
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,28 @@ public class PignaRegistrationInputModel {
4545
[MinLength(2, ErrorMessage = "Nome della provincia troppo corto.")]
4646
public string SchoolProvince { get; set; }
4747

48+
[DataType(DataType.MultilineText)]
49+
[Display(Name = "Indirizzo")]
50+
[Required(ErrorMessage = "Devi specificare il tuo indirizzo di casa.")]
51+
[MinLength(10, ErrorMessage = "Indirizzo di casa troppo corto.")]
52+
public string PersonalAddress { get; set; }
53+
54+
[DataType(DataType.PostalCode)]
55+
[Display(Name = "CAP")]
56+
[Required(ErrorMessage = "Devi specificare il CAP del tuo indirizzo di casa.")]
57+
[StringLength(5, MinimumLength = 5, ErrorMessage = "Il CAP deve essere di 5 lettere.")]
58+
public string PersonalCap { get; set; }
59+
60+
[Display(Name = "Città")]
61+
[Required(ErrorMessage = "Devi specificare la città del tuo indirizzo di casa.")]
62+
[MinLength(3, ErrorMessage = "Nome della città troppo corto.")]
63+
public string PersonalCity { get; set; }
64+
65+
[Display(Name = "Provincia")]
66+
[Required(ErrorMessage = "Devi specificare la provincia del tuo indirizzo di casa.")]
67+
[MinLength(2, ErrorMessage = "Nome della provincia troppo corto.")]
68+
public string PersonalProvince { get; set; }
69+
4870
[DataType(DataType.PhoneNumber)]
4971
[Display(Name = "Numero di telefono")]
5072
[Phone(ErrorMessage = "Specifica un numero di telefono valido.")]

src/Web/Web/Views/Dashboard/PignaRegistration.cshtml

+38
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
<span asp-validation-for="MeccanographicCode" class="text-danger"></span>
2929
</div>
3030

31+
<h3>Indirizzo della scuola</h3>
32+
3133
<div class="form-group">
3234
<label asp-for="SchoolName" class="control-label"></label>
3335
<input asp-for="SchoolName" class="form-control" />
@@ -64,6 +66,42 @@
6466
</div>
6567
</div>
6668

69+
<hr />
70+
71+
<h3>Indirizzo personale</h3>
72+
73+
<div class="form-group">
74+
<label asp-for="PersonalAddress" class="control-label"></label>
75+
<input asp-for="PersonalAddress" class="form-control" />
76+
<span asp-validation-for="PersonalAddress" class="text-danger"></span>
77+
</div>
78+
79+
<div class="form-row">
80+
<div class="col-sm-3">
81+
<div class="form-group">
82+
<label asp-for="PersonalCap" class="control-label"></label>
83+
<input asp-for="PersonalCap" class="form-control" />
84+
<span asp-validation-for="PersonalCap" class="text-danger"></span>
85+
</div>
86+
</div>
87+
<div class="col-sm-7">
88+
<div class="form-group">
89+
<label asp-for="PersonalCity" class="control-label"></label>
90+
<input asp-for="PersonalCity" class="form-control" />
91+
<span asp-validation-for="PersonalCity" class="text-danger"></span>
92+
</div>
93+
</div>
94+
<div class="col-sm-2">
95+
<div class="form-group">
96+
<label asp-for="PersonalProvince" class="control-label"></label>
97+
<input asp-for="PersonalProvince" class="form-control" />
98+
<span asp-validation-for="PersonalProvince" class="text-danger"></span>
99+
</div>
100+
</div>
101+
</div>
102+
103+
<hr />
104+
67105
<div class="form-group">
68106
<label asp-for="PhoneNumber" class="control-label"></label>
69107
<input asp-for="PhoneNumber" class="form-control" />

0 commit comments

Comments
 (0)