-- Lambda Properties Management --

USE LambdaPropertiesManagement1;
GO

CREATE SCHEMA HumanResources;
GO
CREATE SCHEMA Rentals;
GO
CREATE TABLE HumanResources.Employees
(
	EmployeeNumber nvarchar(7) Not Null, 
	FirstName nvarchar(25) NULL,
	LastName nvarchar(25) Not Null,
	Employee AS CONCAT(FirstName, N' ', LastName),
        Title nvarchar(50),
	Constraint PK_Employees Primary Key(EmployeeNumber)
);
GO

CREATE TABLE Rentals.Properties
(
	PropertyNumber  nvarchar(10) not null,
	PropertyType	nvarchar(25) not null,
	Address         nvarchar(50),
	City		nvarchar(40),
	State		nchar(2),
	ZIPCode		nvarchar(12),
	Bedrooms        int,
	Bathrooms       float,
	MonthlyRate     money,
	SecurityDeposit money,
	OccupancyStatus nvarchar(20),
	Constraint PK_Apartments Primary Key(PropertyNumber)
);
GO

CREATE TABLE Rentals.Registrations
(
	RegistrationID   int identity(1001, 1),
	RegistrationDate date,
	EmployeeNumber   nvarchar(7),
	TenantCode       nvarchar(10),
	FirstName        nvarchar(25),
	LastName         nvarchar(25),
	MaritalStatus    nvarchar(20),
	NumberOfChildren smallint,
	PhoneNumber      nvarchar(20),
	EmailAddress     nvarchar(50),
	PropertyNumber   nvarchar(10),
	RentStartDate    date,
	Constraint PK_Registrations Primary Key(RegistrationID),
	Constraint FK_RegistrationsClerks Foreign Key(EmployeeNumber)
		References HumanResources.Employees(EmployeeNumber),
	Constraint FK_RegisteredProperties Foreign Key(PropertyNumber)
		References Rentals.Properties(PropertyNumber)
);
GO

CREATE TABLE Rentals.Payments
(
	PaymentID      int identity(1, 1),
	PaymentDate    date,
	EmployeeNumber nvarchar(7),
	RegistrationID int,
	AmountPaid     money,
	Notes		   nvarchar(max),
	Constraint PK_Payments Primary Key(PaymentID),
	Constraint FK_PaymentsClerks Foreign Key(EmployeeNumber)
		References HumanResources.Employees(EmployeeNumber),
	Constraint FK_RegistrationsPayments Foreign Key(RegistrationID)
		References Rentals.Registrations(RegistrationID)
);
GO

CREATE VIEW Rentals.RegistrationDetails
AS
    SELECT regs.RegistrationID,
	   regs.RegistrationDate,
	   CONCAT(empls.EmployeeNumber, N': ', empls.Employee) Employee,
	   CONCAT(regs.TenantCode, N': ', regs.FirstName, N' ', regs.LastName) Tenant,
	   regs.MaritalStatus,
	   regs.NumberOfChildren,
	   regs.PhoneNumber,
	   regs.EmailAddress,
	   CONCAT(props.PropertyNumber, N': ', props.PropertyType, N' in ',
		  props.City, N' with ', props.Bedrooms, N' bedroom(s) and ',
		  props.Bathrooms, N' bathroom(s). Rent = ', props.MonthlyRate, N'/month. Deposit = ',
		  props.SecurityDeposit) PropertyDetails,
	   regs.RentStartDate
    FROM Rentals.Registrations regs
    INNER JOIN HumanResources.Employees empls ON regs.EmployeeNumber = empls.EmployeeNumber
    INNER JOIN Rentals.Properties props ON regs.PropertyNumber = props.PropertyNumber;
GO

CREATE VIEW Rentals.PaymentsDetails
AS
    SELECT pmts.PaymentID,
	   pmts.PaymentDate,
	   CONCAT(empls.EmployeeNumber, N': ', empls.Employee) ProcessedBy,
	   CONCAT(N'Registered on ', regs.RegistrationDate, N', by ',
		  regs.Employee, N', for ', regs.Tenant, N'. Rent Start Date: ',
		  regs.RentStartDate) RegistrationInformation,
	   pmts.AmountPaid,
	   pmts.Notes
    FROM Rentals.Payments pmts
    INNER JOIN HumanResources.Employees empls ON pmts.EmployeeNumber = empls.EmployeeNumber
    INNER JOIN RegistrationDetails regs ON pmts.RegistrationID = regs.RegistrationID;
GO

INSERT INTO  HumanResources.Employees(EmployeeNumber, FirstName, LastName, Title)
VALUES(N'40685', N'Justine', N'Sandt', N'Rent Manager');
GO
INSERT INTO  HumanResources.Employees(EmployeeNumber, FirstName, LastName)
VALUES(N'73048', N'Raymond', N'Wilkinson');
GO
INSERT INTO  HumanResources.Employees(EmployeeNumber, FirstName, LastName, Title)
VALUES(N'60949', N'Mark',    N'Reason',    N'Maintenance Technician'),
      (N'38408', N'Marc',    N'Knights',   N'Rent Associate'),
      (N'14925', N'Jane',    N'Proctor',   N'Human Resources Manager'),
      (N'93947', N'Leonard', N'Goulet',    N'Owner - General Manager'),
      (N'28048', N'Thomas',  N'Wilkens',   N'Bookeeper'),
      (N'20448', N'Nancy',   N'Longhorn',  N'Rent Associate'),
      (N'80848', N'Horace',  N'Taylor',    N'Maintenance Technician'),
      (N'61840', N'Martin',  N'Schroeder', N'Rent Associate');
GO

INSERT INTO Rentals.Properties
VALUES(N'399475', N'Apartment',     N'6802 Gulf Branch Ave #101',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1150,  650, N'Available'),
	  (N'508293', N'Apartment',     N'6802 Gulf Branch Ave #102',  N'Rockville',     N'MD', N'20850', 1, 1.00,  950,  500, N'Needs Repair'),
	  (N'729397', N'Apartment',     N'6802 Gulf Branch Ave #103',  N'Rockville',     N'MD', N'20850', 1, 1.00,  925,  500, N'Available'),
	  (N'928364', N'Apartment',     N'6802 Gulf Branch Ave #104',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1350,  850, N'Available'),
	  (N'297297', N'Apartment',     N'6802 Gulf Branch Ave #105',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1150,  650, N'Available'),
	  (N'492739', N'Apartment',     N'6802 Gulf Branch Ave #106',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1350,  850, N'Available'),
	  (N'692797', N'Apartment',     N'6802 Gulf Branch Ave #107',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1285,  850, N'Not Ready'),
	  (N'829475', N'Apartment',     N'6802 Gulf Branch Ave #108',  N'Rockville',     N'MD', N'20850', 1, 1.00,  885,  500, N'Available'),
	  (N'139749', N'Apartment',     N'6802 Gulf Branch Ave #109',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1150,  650, N'Available'),
	  (N'369294', N'Apartment',     N'6802 Gulf Branch Ave #110',  N'Rockville',     N'MD', N'20850', 1, 1.00,  895,  500, N'Available'),
	  (N'502084', N'Apartment',     N'6802 Gulf Branch Ave #111',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1145,  650, N'Available'),
	  (N'829397', N'Apartment',     N'6802 Gulf Branch Ave #112',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1085,  600, N'Available'),
	  (N'292739', N'Apartment',     N'6802 Gulf Branch Ave #201',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1185,  650, N'Available'),
	  (N'496055', N'Apartment',     N'6802 Gulf Branch Ave #202',  N'Rockville',     N'MD', N'20850', 1, 1.00,  895,  500, N'Available'),
	  (N'939595', N'Apartment',     N'6802 Gulf Branch Ave #203',  N'Rockville',     N'MD', N'20850', 1, 1.00,  925,  500, N'Available'),
	  (N'384068', N'Apartment',     N'6802 Gulf Branch Ave #204',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1250,  850, N'Available'),
	  (N'824850', N'Apartment',     N'6802 Gulf Branch Ave #205',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1100,  650, N'Available'),
	  (N'620485', N'Apartment',     N'6802 Gulf Branch Ave #206',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1300,  850, N'Available'),
	  (N'294940', N'Apartment',     N'6802 Gulf Branch Ave #207',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1350,  850, N'Available'),
	  (N'602048', N'Apartment',     N'6802 Gulf Branch Ave #208',  N'Rockville',     N'MD', N'20850', 1, 1.00,  920,  500, N'Available'),
	  (N'829479', N'Apartment',     N'6802 Gulf Branch Ave #209',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1150,  650, N'Available'),
	  (N'280484', N'Apartment',     N'6802 Gulf Branch Ave #210',  N'Rockville',     N'MD', N'20850', 1, 1.00,  895,  500, N'Available'),
	  (N'602408', N'Apartment',     N'6802 Gulf Branch Ave #211',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1175,  650, N'Available'),
	  (N'384086', N'Apartment',     N'6802 Gulf Branch Ave #212',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1075,  600, N'Available'),
	  (N'397493', N'Apartment',     N'6802 Gulf Branch Ave #301',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1175,  650, N'Available'),
	  (N'625941', N'Apartment',     N'6802 Gulf Branch Ave #302',  N'Rockville',     N'MD', N'20850', 1, 1.00,  950,  500, N'Available'),
	  (N'404950', N'Apartment',     N'6802 Gulf Branch Ave #303',  N'Rockville',     N'MD', N'20850', 1, 1.00,  925,  500, N'Available'),
	  (N'304806', N'Apartment',     N'6802 Gulf Branch Ave #304',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1250,  850, N'Available'),
	  (N'844850', N'Apartment',     N'6802 Gulf Branch Ave #305',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1100,  650, N'Needs Repair'),
	  (N'596305', N'Apartment',     N'6802 Gulf Branch Ave #306',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1300,  850, N'Available'),
	  (N'138408', N'Apartment',     N'6802 Gulf Branch Ave #307',  N'Rockville',     N'MD', N'20850', 3, 2.00, 1350,  850, N'Available'),
	  (N'305860', N'Apartment',     N'6802 Gulf Branch Ave #308',  N'Rockville',     N'MD', N'20850', 1, 1.00,  920,  500, N'Available'),
	  (N'847584', N'Apartment',     N'6802 Gulf Branch Ave #309',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1150,  650, N'Available'),
	  (N'746959', N'Apartment',     N'6802 Gulf Branch Ave #310',  N'Rockville',     N'MD', N'20850', 1, 1.00,  935,  500, N'Available'),
	  (N'359405', N'Apartment',     N'6802 Gulf Branch Ave #311',  N'Rockville',     N'MD', N'20850', 2, 2.00, 1175,  650, N'Available'),
	  (N'308505', N'Apartment',     N'6802 Gulf Branch Ave #312',  N'Rockville',     N'MD', N'20850', 2, 1.00, 1075,  600, N'Available'),
	  (N'620048', N'Apartment',     N'10314 Springster Rd #1A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1150,  650, N'Available'),
	  (N'355204', N'Apartment',     N'10314 Springster Rd #1B',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1375, 1000, N'Available'),
	  (N'622486', N'Apartment',     N'10314 Springster Rd #1C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1425, 1200, N'Available'),
	  (N'175947', N'Apartment',     N'10314 Springster Rd #1D',    N'Alexandria',    N'VA', N'22312', 3, 2.00, 1650, 1400, N'Available'),
	  (N'597030', N'Apartment',     N'10314 Springster Rd #2A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1150,  650, N'Available'),
	  (N'682048', N'Apartment',     N'10314 Springster Rd #2B',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1375, 1000, N'Available'),
	  (N'927394', N'Apartment',     N'10314 Springster Rd #2C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1425, 1200, N'Available'),
	  (N'350511', N'Apartment',     N'10314 Springster Rd #2D',    N'Alexandria',    N'VA', N'22312', 3, 2.00, 1650, 1400, N'Available'),
	  (N'628048', N'Apartment',     N'10314 Springster Rd #3A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1150,  650, N'Available'),
	  (N'394695', N'Apartment',     N'10314 Springster Rd #3B',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1375, 1000, N'Available'),
	  (N'241600', N'Apartment',     N'10314 Springster Rd #3C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1425, 1200, N'Available'),
	  (N'495596', N'Apartment',     N'10314 Springster Rd #3D',    N'Alexandria',    N'VA', N'22312', 3, 2.00, 1650, 1400, N'Available'),
	  (N'304060', N'Apartment',     N'10316 Springster Rd #1A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1250, 1000, N'Available'),
	  (N'639496', N'Apartment',     N'10316 Springster Rd #1B',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1450, 1200, N'Available'),
	  (N'795007', N'Apartment',     N'10316 Springster Rd #1C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1600, 1400, N'Available'),
	  (N'640494', N'Apartment',     N'10316 Springster Rd #1D',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1500, 1200, N'Available'),
	  (N'409496', N'Apartment',     N'10316 Springster Rd #2A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1250, 1000, N'Available'),
	  (N'629595', N'Apartment',     N'10316 Springster Rd #2B',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1450, 1200, N'Available'),
	  (N'394060', N'Apartment',     N'10316 Springster Rd #2C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1600, 1400, N'Available'),
	  (N'240504', N'Apartment',     N'10316 Springster Rd #2D',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1500, 1200, N'Available'),
	  (N'628408', N'Apartment',     N'10316 Springster Rd #3A',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1250, 1000, N'Available'),
	  (N'409362', N'Apartment',     N'10316 Springster Rd #3B',    N'Alexandria',    N'VA', N'22312', 1, 1.00, 1450, 1200, N'Available'),
	  (N'826497', N'Apartment',     N'10316 Springster Rd #3C',    N'Alexandria',    N'VA', N'22312', 2, 2.00, 1600, 1400, N'Available'),
	  (N'630496', N'Apartment',     N'10316 Springster Rd #3D',    N'Alexandria',    N'VA', N'22312', 2, 1.00, 1500, 1000, N'Available'),
	  (N'620952', N'Condominium',   N'4606 Canterbury Ave #802',   N'Bethesda',      N'MD', N'20814', 1, 1.00, 1265,  850, N'Available'),
	  (N'729384', N'Condominium',   N'4606 Canterbury Ave #804',   N'Bethesda',      N'MD', N'20814', 2, 2.00, 1475, 1000, N'Available'),
	  (N'609527', N'Condominium',   N'3139 Orchard Ridge Ave #E2', N'Baltimore',     N'MD', N'21201', 1, 1.00,  865,  500, N'Available'),
	  (N'924959', N'Condominium',   N'4606 Canterbury Ave #1012',  N'Bethesda',      N'MD', N'20814', 1, 1.00, 1265,  850, N'Available'),
	  (N'682846', N'Condominium',   N'3139 Orchard Ridge Ave #E4', N'Baltimore',     N'MD', N'21201', 3, 2.00, 1480, 1000, N'Available'),
	  (N'628085', N'Condominium',   N'3139 Orchard Ridge Ave #W4', N'Baltimore',     N'MD', N'21201', 1, 1.00,  865,  500, N'Not Ready'),
	  (N'139740', N'Condominium',   N'4606 Canterbury Ave #1014',  N'Bethesda',      N'MD', N'20814', 2, 2.00, 1475, 1000, N'Available'),
	  (N'283508', N'Condominium',   N'4606 Canterbury Ave #1015',  N'Bethesda',      N'MD', N'20814', 1, 1.00, 1265,  850, N'Available'),
	  (N'927957', N'Condominium',   N'3139 Orchard Ridge Ave #E6', N'Baltimore',     N'MD', N'21201', 2, 2.00, 1150,  650, N'Available'),
	  (N'928485', N'Townhouse',     N'688 Larrington St NW',       N'Washington',    N'DC', N'20012', 3, 2.50, 1450,  850, N'Available'),
	  (N'928028', N'Townhouse',     N'2410 Jerridan Str NW',       N'Washington',    N'DC', N'20008', 4, 3.50, 2850, 1250, N'Available'),
	  (N'248664', N'Townhouse',     N'10344 Dunfield Drv',         N'Columbia',      N'MD', N'21045', 3, 2.50, 1850, 1200, N'Available'),
	  (N'592739', N'Townhouse',     N'8114 Parlance Rd',           N'Silver Spring', N'MD', N'20902', 3, 2.50, 1580, 1250, N'Needs Repair'),
	  (N'188483', N'Townhouse',     N'1406 Great Rossy Ave',       N'Columbia',      N'MD', N'21045', 3, 2.50, 1665, 1200, N'Available'),
	  (N'400486', N'Townhouse',     N'1408 Great Rossy Ave',       N'Columbia',      N'MD', N'21045', 4, 2.50, 1200,  800, N'Available'),
	  (N'182839', N'Townhouse',     N'10708 Silver Stone Str',     N'Arlington',     N'VA', N'22201', 3, 2.50, 1885, 1200, N'Available'),
	  (N'629394', N'Townhouse',     N'6812 Jerry Woods Ave',       N'Silver Spring', N'MD', N'20906', 3, 2.50, 1580, 1200, N'Available'),
	  (N'248549', N'Townhouse',     N'1410 Great Rossy Ave',       N'Columbia',      N'MD', N'21045', 4, 2.50, 2475, 1500, N'Available'),
	  (N'240051', N'Townhouse',     N'1877 Charley Rd',            N'Arlington',     N'VA', N'22202', 3, 1.50, 1575, 1200, N'Available'),
	  (N'724085', N'Townhouse',     N'2505 Renaissance Ln',        N'Silver Spring', N'MD', N'20904', 3, 2.50, 1885, 1200, N'Available'),
	  (N'595700', N'Townhouse',     N'10224 Pleasntry Ave',        N'College Park',  N'MD', N'20740', 3, 2.50, 1450, 1000, N'Available'),
	  (N'939475', N'Townhouse',     N'1044 Connors Rd NW',         N'Washington',    N'DC', N'20004', 4, 2.50, 1775, 1200, N'Available'),
	  (N'929475', N'Townhouse',     N'1412 Great Rossy Ave',       N'Columbia',      N'MD', N'21045', 3, 1.50, 1750, 1200, N'Available'),
	  (N'394960', N'Townhouse',     N'1844 Willow Woodson Rd',     N'Rockville',     N'MD', N'20854', 3, 1.50, 1885, 1200, N'Available'),
	  (N'884804', N'Single Family', N'8602 Jorham Drv',	       N'Silver Spring', N'MD', N'20906', 5, 3.50, 2880, 1000, N'Available'),
	  (N'204058', N'Single Family', N'426 Zimmers Rd',	       N'Silver Spring', N'MD', N'20901', 4, 2.50, 2650, 1000, N'Available'),
	  (N'280495', N'Single Family', N'12304 Donaldson Rd',	       N'College Park',  N'MD', N'20740', 4, 3.50, 2500, 1000, N'Not Ready'),
	  (N'632409', N'Single Family', N'7002 War Fair Drv',	       N'Arlington',     N'VA', N'22201', 5, 3.50, 3200, 1500, N'Available'),
	  (N'828479', N'Single Family', N'9910 East Rolling Rd',       N'Silver Spring', N'MD', N'20910', 4, 3.50, 2485, 1200, N'Available'),
	  (N'929375', N'Single Family', N'1505 Leamington Rd',	       N'College Park',  N'MD', N'20740', 5, 2.50, 2600, 1500, N'Needs Repair'),
	  (N'205840', N'Single Family', N'929 Carnage Crt',	       N'Gaithersburg',  N'MD', N'20877', 3, 2.50, 1500, 1200, N'Available'),
	  (N'726385', N'Single Family', N'664 Vast Armey Way',	       N'Alexandria',    N'VA', N'22312', 4, 3.50, 2425, 1500, N'Not Ready'),
	  (N'825940', N'Single Family', N'2214 East Jonathan Crt',     N'Silver Spring', N'MD', N'20901', 3, 1.50, 1575, 1200, N'Available'),
	  (N'620494', N'Single Family', N'8288 Prophesia Way',	       N'Annapolis',     N'MD', N'20404', 4, 2.50, 1250, 1000, N'Needs Repair'),
	  (N'396922', N'Single Family', N'7114 West Janitor Str',      N'Rockville',     N'MD', N'20854', 4, 2.50, 2650, 1500, N'Available'),
	  (N'380685', N'Single Family', N'375 Reisters Way',	       N'Arlington',     N'VA', N'22203', 5, 2.50, 3250, 1500, N'Needs Repair'),
	  (N'926836', N'Single Family', N'681 Jane Mood St',	       N'Alexandria',    N'VA', N'22312', 3, 2.50, 1890, 1200, N'Available'),
	  (N'220470', N'Single Family', N'206 Checker Ct',	       N'Silver Spring', N'MD', N'20901', 5, 3.50, 2750, 1500, N'Not Ready'),
	  (N'284957', N'Single Family', N'8249 North Plum Ave',	       N'Bethesda',      N'MD', N'20814', 4, 3.50, 2880, 1500, N'Available'),
	  (N'952948', N'Single Family', N'771 Glentley Rd',	       N'Alexandria',    N'VA', N'22312', 3, 2.00, 2200, 1400, N'Needs Repair');
GO