deploy
Deploy restore contacts feature
fc06b79
@model ContactManagementAPI.Models.Contact
@{
ViewData["Title"] = "Create New Contact";
var groups = (ViewData["Groups"] as List<ContactManagementAPI.Models.ContactGroup>) ?? new List<ContactManagementAPI.Models.ContactGroup>();
var bankAccounts = (ViewData["BankAccounts"] as List<ContactManagementAPI.Models.ContactBankAccount>) ?? new List<ContactManagementAPI.Models.ContactBankAccount> { new ContactManagementAPI.Models.ContactBankAccount() };
var bankNames = (ViewData["BankNames"] as List<string>) ?? new List<string>();
}
<div class="form-container">
<div class="form-header">
<h2><i class="fas fa-plus-circle"></i> Create New Contact</h2>
</div>
<form asp-action="Create" method="post" enctype="multipart/form-data" class="contact-form">
@Html.AntiForgeryToken()
<div asp-validation-summary="ModelOnly" class="alert alert-danger"></div>
<div class="form-section">
<h4>Profile Photo</h4>
<div class="form-row">
<div class="form-group full-width">
<label for="profilePhoto">Upload Profile Photo</label>
<input type="file" id="profilePhoto" name="profilePhoto" accept="image/*" class="form-control" />
<small class="form-text text-muted">Accepted formats: JPG, PNG, GIF, BMP (Max 5MB)</small>
</div>
</div>
</div>
<div class="form-section">
<h4>Basic Information</h4>
<div class="form-row">
<div class="form-group">
<label asp-for="FirstName">First Name *</label>
<input asp-for="FirstName" class="form-control" required autocomplete="given-name" />
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LastName">Last Name</label>
<input asp-for="LastName" class="form-control" autocomplete="family-name" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="NickName">Nick Name</label>
<input asp-for="NickName" class="form-control" autocomplete="nickname" />
</div>
<div class="form-group">
<label asp-for="Gender">Gender</label>
<select asp-for="Gender" class="form-control">
<option value="">-- Select Gender --</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
<option value="Other">Other</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="DateOfBirth">Date of Birth</label>
<input asp-for="DateOfBirth" type="date" asp-format="{0:yyyy-MM-dd}" class="form-control" />
</div>
<div class="form-group">
<label asp-for="GroupId">Contact Group</label>
<select asp-for="GroupId" class="form-control">
<option value="">-- Select Group --</option>
@foreach (var group in groups)
{
<option value="@group.Id">@group.Name</option>
}
</select>
</div>
</div>
</div>
<div class="form-section">
<h4>Contact Details</h4>
<div class="form-row">
<div class="form-group">
<label asp-for="Email">Email Address</label>
<input asp-for="Email" type="email" class="form-control" inputmode="email" autocomplete="email" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="Mobile1">Mobile 1</label>
<input asp-for="Mobile1" type="tel" class="form-control" inputmode="tel" autocomplete="tel" />
</div>
<div class="form-group">
<label asp-for="Mobile2">Mobile 2</label>
<input asp-for="Mobile2" type="tel" class="form-control" inputmode="tel" autocomplete="tel" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="Mobile3">Mobile 3</label>
<input asp-for="Mobile3" type="tel" class="form-control" inputmode="tel" autocomplete="tel" />
</div>
<div class="form-group">
<label asp-for="WhatsAppNumber">WhatsApp Number</label>
<input asp-for="WhatsAppNumber" type="tel" class="form-control" inputmode="tel" autocomplete="tel" />
</div>
</div>
</div>
<div class="form-section">
<h4>Identity Information</h4>
<div class="form-row">
<div class="form-group">
<label asp-for="PassportNumber">Passport Number</label>
<input asp-for="PassportNumber" class="form-control" />
</div>
<div class="form-group">
<label asp-for="PanNumber">PAN Number</label>
<input asp-for="PanNumber" class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="AadharNumber">Aadhar Number</label>
<input asp-for="AadharNumber" class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="DrivingLicenseNumber">Driving License Number</label>
<input asp-for="DrivingLicenseNumber" class="form-control" />
</div>
<div class="form-group">
<label asp-for="VotersId">Voters ID</label>
<input asp-for="VotersId" class="form-control" />
</div>
</div>
</div>
<div class="form-section">
<h4>Bank Information</h4>
<datalist id="bankNameOptions">
@foreach (var bankName in bankNames)
{
<option value="@bankName"></option>
}
</datalist>
<div id="bankAccountsContainer">
@for (var i = 0; i < bankAccounts.Count; i++)
{
<div class="bank-account-row" style="border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px; margin-bottom: 12px;">
<div class="form-row">
<div class="form-group">
<label>Bank Account Number</label>
<input name="bankAccounts[@i].AccountNumber" value="@bankAccounts[i].AccountNumber" class="form-control" />
</div>
<div class="form-group">
<label>Bank Name</label>
<input name="bankAccounts[@i].BankName" value="@bankAccounts[i].BankName" class="form-control" list="bankNameOptions" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label>Branch Name</label>
<input name="bankAccounts[@i].BranchName" value="@bankAccounts[i].BranchName" class="form-control" />
</div>
<div class="form-group">
<label>IFSC Code</label>
<input name="bankAccounts[@i].IfscCode" value="@bankAccounts[i].IfscCode" class="form-control" />
</div>
</div>
<button type="button" class="btn btn-secondary remove-bank-account" style="background:#6b7280; margin-top:8px;">Remove Account</button>
</div>
}
</div>
<button type="button" id="addBankAccountBtn" class="btn btn-secondary" style="background:#0EA5E9; margin-top:6px;">
<i class="fas fa-plus"></i> Add Another Bank Account
</button>
</div>
<div class="form-section">
<h4>Address Information</h4>
<div class="form-row">
<div class="form-group full-width">
<label asp-for="Address">Street Address</label>
<input asp-for="Address" class="form-control" autocomplete="street-address" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="City">City</label>
<input asp-for="City" class="form-control" autocomplete="address-level2" />
</div>
<div class="form-group">
<label asp-for="State">State</label>
<input asp-for="State" class="form-control" autocomplete="address-level1" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label asp-for="PostalCode">Postal Code</label>
<input asp-for="PostalCode" class="form-control" inputmode="numeric" autocomplete="postal-code" />
</div>
<div class="form-group">
<label asp-for="Country">Country</label>
<input asp-for="Country" class="form-control" autocomplete="country-name" />
</div>
</div>
</div>
<div class="form-section">
<h4>Additional Information</h4>
<div class="form-row">
<div class="form-group full-width">
<label asp-for="OtherDetails">Other Details / Notes</label>
<textarea asp-for="OtherDetails" class="form-control" rows="4"></textarea>
</div>
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">
<i class="fas fa-save"></i> Create Contact
</button>
<a href="/home/index" class="btn btn-secondary">
<i class="fas fa-times"></i> Cancel
</a>
</div>
</form>
<div class="info-box" style="margin-top: 20px; padding: 15px; background: #e3f2fd; border-radius: 8px;">
<h4 style="color: #1976d2; margin-bottom: 10px;"><i class="fas fa-info-circle"></i> Note</h4>
<p style="margin: 5px 0;"><strong>Photo Albums:</strong> After creating the contact, you can add multiple photos to their album from the contact details page.</p>
<p style="margin: 5px 0;"><strong>Documents:</strong> You can attach documents (PDF, Word, Excel, etc.) from the contact details page after creation.</p>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
document.addEventListener('DOMContentLoaded', function () {
const bankAccountsContainer = document.getElementById('bankAccountsContainer');
const addBankAccountBtn = document.getElementById('addBankAccountBtn');
function reindexBankRows() {
const rows = bankAccountsContainer.querySelectorAll('.bank-account-row');
rows.forEach((row, index) => {
row.querySelectorAll('input').forEach(input => {
if (input.name.includes('.AccountNumber')) input.name = `bankAccounts[${index}].AccountNumber`;
if (input.name.includes('.BankName')) input.name = `bankAccounts[${index}].BankName`;
if (input.name.includes('.BranchName')) input.name = `bankAccounts[${index}].BranchName`;
if (input.name.includes('.IfscCode')) input.name = `bankAccounts[${index}].IfscCode`;
});
});
}
function wireRemoveButtons() {
const removeButtons = bankAccountsContainer.querySelectorAll('.remove-bank-account');
removeButtons.forEach(button => {
button.onclick = function () {
const rows = bankAccountsContainer.querySelectorAll('.bank-account-row');
if (rows.length === 1) {
rows[0].querySelectorAll('input').forEach(input => input.value = '');
return;
}
this.closest('.bank-account-row').remove();
reindexBankRows();
};
});
}
addBankAccountBtn.addEventListener('click', function () {
const index = bankAccountsContainer.querySelectorAll('.bank-account-row').length;
const rowHtml = `
<div class="bank-account-row" style="border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px; margin-bottom: 12px;">
<div class="form-row">
<div class="form-group">
<label>Bank Account Number</label>
<input name="bankAccounts[${index}].AccountNumber" class="form-control" />
</div>
<div class="form-group">
<label>Bank Name</label>
<input name="bankAccounts[${index}].BankName" class="form-control" list="bankNameOptions" />
</div>
</div>
<div class="form-row">
<div class="form-group">
<label>Branch Name</label>
<input name="bankAccounts[${index}].BranchName" class="form-control" />
</div>
<div class="form-group">
<label>IFSC Code</label>
<input name="bankAccounts[${index}].IfscCode" class="form-control" />
</div>
</div>
<button type="button" class="btn btn-secondary remove-bank-account" style="background:#6b7280; margin-top:8px;">Remove Account</button>
</div>`;
bankAccountsContainer.insertAdjacentHTML('beforeend', rowHtml);
wireRemoveButtons();
});
wireRemoveButtons();
});
</script>
}