This commit is contained in:
Zeeshaun
2026-04-20 14:47:24 -05:00
parent 89057eceea
commit 8b3ea92501
485 changed files with 71042 additions and 0 deletions
@@ -0,0 +1,16 @@
{
"ExtendedData": {
"inputs": [
"https://webservice-stage.jdpowervalues.com/vehicles/secure/securelogin.asmx?wsdl"
],
"collectionTypes": [
"System.Array",
"System.Collections.Generic.Dictionary`2"
],
"namespaceMappings": [
"*, JdpLogin"
],
"targetFramework": "netcoreapp2.2",
"typeReuseMode": "All"
}
}
@@ -0,0 +1,257 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace JdpLogin
{
using System.Runtime.Serialization;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.Runtime.Serialization.DataContractAttribute(Name="GetTokenRequest", Namespace="http://webservice.jdpowervalues.com/")]
public partial class GetTokenRequest : object
{
private string UsernameField;
private string PasswordField;
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
public string Username
{
get
{
return this.UsernameField;
}
set
{
this.UsernameField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=1)]
public string Password
{
get
{
return this.PasswordField;
}
set
{
this.PasswordField = value;
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://webservice.jdpowervalues.com/", ConfigurationName="JdpLogin.SecureLoginSoap")]
public interface SecureLoginSoap
{
[System.ServiceModel.OperationContractAttribute(Action="http://webservice.jdpowervalues.com/getToken", ReplyAction="*")]
System.Threading.Tasks.Task<JdpLogin.getTokenResponse> getTokenAsync(JdpLogin.getTokenRequest1 request);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class getTokenRequest1
{
[System.ServiceModel.MessageBodyMemberAttribute(Name="getToken", Namespace="http://webservice.jdpowervalues.com/", Order=0)]
public JdpLogin.getTokenRequest1Body Body;
public getTokenRequest1()
{
}
public getTokenRequest1(JdpLogin.getTokenRequest1Body Body)
{
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute(Namespace="http://webservice.jdpowervalues.com/")]
public partial class getTokenRequest1Body
{
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)]
public JdpLogin.GetTokenRequest tokenRequest;
public getTokenRequest1Body()
{
}
public getTokenRequest1Body(JdpLogin.GetTokenRequest tokenRequest)
{
this.tokenRequest = tokenRequest;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
public partial class getTokenResponse
{
[System.ServiceModel.MessageBodyMemberAttribute(Name="getTokenResponse", Namespace="http://webservice.jdpowervalues.com/", Order=0)]
public JdpLogin.getTokenResponseBody Body;
public getTokenResponse()
{
}
public getTokenResponse(JdpLogin.getTokenResponseBody Body)
{
this.Body = Body;
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.Runtime.Serialization.DataContractAttribute(Namespace="http://webservice.jdpowervalues.com/")]
public partial class getTokenResponseBody
{
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)]
public string getTokenResult;
public getTokenResponseBody()
{
}
public getTokenResponseBody(string getTokenResult)
{
this.getTokenResult = getTokenResult;
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
public interface SecureLoginSoapChannel : JdpLogin.SecureLoginSoap, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
public partial class SecureLoginSoapClient : System.ServiceModel.ClientBase<JdpLogin.SecureLoginSoap>, JdpLogin.SecureLoginSoap
{
/// <summary>
/// Implement this partial method to configure the service endpoint.
/// </summary>
/// <param name="serviceEndpoint">The endpoint to configure</param>
/// <param name="clientCredentials">The client credentials</param>
static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials);
public SecureLoginSoapClient(EndpointConfiguration endpointConfiguration) :
base(SecureLoginSoapClient.GetBindingForEndpoint(endpointConfiguration), SecureLoginSoapClient.GetEndpointAddress(endpointConfiguration))
{
this.Endpoint.Name = endpointConfiguration.ToString();
ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
}
public SecureLoginSoapClient(EndpointConfiguration endpointConfiguration, string remoteAddress) :
base(SecureLoginSoapClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress))
{
this.Endpoint.Name = endpointConfiguration.ToString();
ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
}
public SecureLoginSoapClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) :
base(SecureLoginSoapClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress)
{
this.Endpoint.Name = endpointConfiguration.ToString();
ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
}
public SecureLoginSoapClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.Threading.Tasks.Task<JdpLogin.getTokenResponse> JdpLogin.SecureLoginSoap.getTokenAsync(JdpLogin.getTokenRequest1 request)
{
return base.Channel.getTokenAsync(request);
}
public System.Threading.Tasks.Task<JdpLogin.getTokenResponse> getTokenAsync(JdpLogin.GetTokenRequest tokenRequest)
{
JdpLogin.getTokenRequest1 inValue = new JdpLogin.getTokenRequest1();
inValue.Body = new JdpLogin.getTokenRequest1Body();
inValue.Body.tokenRequest = tokenRequest;
return ((JdpLogin.SecureLoginSoap)(this)).getTokenAsync(inValue);
}
public virtual System.Threading.Tasks.Task OpenAsync()
{
return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndOpen));
}
public virtual System.Threading.Tasks.Task CloseAsync()
{
return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndClose));
}
private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
{
if ((endpointConfiguration == EndpointConfiguration.SecureLoginSoap))
{
System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
return result;
}
if ((endpointConfiguration == EndpointConfiguration.SecureLoginSoap12))
{
System.ServiceModel.Channels.CustomBinding result = new System.ServiceModel.Channels.CustomBinding();
System.ServiceModel.Channels.TextMessageEncodingBindingElement textBindingElement = new System.ServiceModel.Channels.TextMessageEncodingBindingElement();
textBindingElement.MessageVersion = System.ServiceModel.Channels.MessageVersion.CreateVersion(System.ServiceModel.EnvelopeVersion.Soap12, System.ServiceModel.Channels.AddressingVersion.None);
result.Elements.Add(textBindingElement);
System.ServiceModel.Channels.HttpsTransportBindingElement httpsBindingElement = new System.ServiceModel.Channels.HttpsTransportBindingElement();
httpsBindingElement.AllowCookies = true;
httpsBindingElement.MaxBufferSize = int.MaxValue;
httpsBindingElement.MaxReceivedMessageSize = int.MaxValue;
result.Elements.Add(httpsBindingElement);
return result;
}
throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
}
private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration)
{
if ((endpointConfiguration == EndpointConfiguration.SecureLoginSoap))
{
return new System.ServiceModel.EndpointAddress("https://webservice-stage.jdpowervalues.com/vehicles/secure/securelogin.asmx");
}
if ((endpointConfiguration == EndpointConfiguration.SecureLoginSoap12))
{
return new System.ServiceModel.EndpointAddress("https://webservice-stage.jdpowervalues.com/vehicles/secure/securelogin.asmx");
}
throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
}
public enum EndpointConfiguration
{
SecureLoginSoap,
SecureLoginSoap12,
}
}
}
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://webservice.jdpowervalues.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://webservice.jdpowervalues.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">This is JDPA Web Service into its Login methods.</wsdl:documentation>
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://webservice.jdpowervalues.com/">
<s:element name="getToken">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="tokenRequest" type="tns:GetTokenRequest" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="GetTokenRequest">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Username" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string" />
</s:sequence>
</s:complexType>
<s:element name="getTokenResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="getTokenResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="getTokenSoapIn">
<wsdl:part name="parameters" element="tns:getToken" />
</wsdl:message>
<wsdl:message name="getTokenSoapOut">
<wsdl:part name="parameters" element="tns:getTokenResponse" />
</wsdl:message>
<wsdl:portType name="SecureLoginSoap">
<wsdl:operation name="getToken">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Logs the user in and returns a valid token.</wsdl:documentation>
<wsdl:input message="tns:getTokenSoapIn" />
<wsdl:output message="tns:getTokenSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SecureLoginSoap" type="tns:SecureLoginSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getToken">
<soap:operation soapAction="http://webservice.jdpowervalues.com/getToken" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SecureLoginSoap12" type="tns:SecureLoginSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getToken">
<soap12:operation soapAction="http://webservice.jdpowervalues.com/getToken" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SecureLogin">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">This is JDPA Web Service into its Login methods.</wsdl:documentation>
<wsdl:port name="SecureLoginSoap" binding="tns:SecureLoginSoap">
<soap:address location="https://webservice-stage.jdpowervalues.com/vehicles/secure/securelogin.asmx" />
</wsdl:port>
<wsdl:port name="SecureLoginSoap12" binding="tns:SecureLoginSoap12">
<soap12:address location="https://webservice-stage.jdpowervalues.com/vehicles/secure/securelogin.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
@@ -0,0 +1,16 @@
{
"ExtendedData": {
"inputs": [
"http://webservice-stage.jdpowervalues.com/vehicles/vehicle.asmx?wsdl"
],
"collectionTypes": [
"System.Array",
"System.Collections.Generic.Dictionary`2"
],
"namespaceMappings": [
"*, JdpVehicle"
],
"targetFramework": "netcoreapp2.2",
"typeReuseMode": "All"
}
}
@@ -0,0 +1,9 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Exceptions
{
public class DuplicateResourceException : Exception
{
public DuplicateResourceException(string resourceType) : base($"Duplicate Resources of type {resourceType} were found.") { }
}
}
@@ -0,0 +1,13 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Exceptions
{
public class MaxItemException : Exception
{
public MaxItemException(int itemCount) : base("Too Many Items Were Produced Than Were Allowed.") {
ItemCount = itemCount;
}
public int ItemCount { get; set; }
}
}
@@ -0,0 +1,9 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Exceptions
{
public class UnwantedStatusException : Exception
{
public UnwantedStatusException(int repoId, string accountNo) : base($"Account Number {accountNo} with Repossession ID {repoId} is in Cancelled or Redeemed status") { }
}
}
@@ -0,0 +1,37 @@
using System.Linq;
using LCU.Shared.Collections.RepoApiLib.Models;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Extensions
{
public static class QueryableIncludeAll
{
public static IQueryable<RepoAccount> IncludeAll(this IQueryable<RepoAccount> queryable)
{
return queryable
.Include(repo => repo.Borrowers)
.Include(repo => repo.Collaterals)
.ThenInclude(collateral => collateral.RepoCompanySelections)
.Include(repo => repo.RepoStatusChanges)
.Include(repo => repo.RefundStatus)
.Include(repo => repo.SixtyPlusCollector)
;
}
public static IQueryable<AuctionAssignment> IncludeAll(this IQueryable<AuctionAssignment> queryable)
{
return queryable
.Include(auctionAssignment => auctionAssignment.Auction)
.Include(auctionAssignment => auctionAssignment.AutoIMS)
.Include(auctionAssignment => auctionAssignment.FloorPriceValuesUsed)
.ThenInclude(fpvu => fpvu.CollateralValuation)
.Include(auctionAssignment => auctionAssignment.AuctionAssignmentToCollaterals)
.ThenInclude(aa2c => aa2c.Collateral);
}
public static IQueryable<Collateral> IncludeAll(this IQueryable<Collateral> queryable)
{
return queryable.Include(collateral => collateral.RepoCompanySelections);
}
}
}
@@ -0,0 +1,31 @@
using System.Collections.Concurrent;
using System.Threading;
namespace LCU.Shared.Collections.RepoApiLib.Hosted
{
/**
* Should be injected as a singleton. Can be used by a controller to queue something.
*/
public class HostedTaskQueue : IHostedTaskQueue
{
private readonly BlockingCollection<TaskSettings> _tasks = new BlockingCollection<TaskSettings>();
// This will not block.
public void Enqueue(TaskSettings settings)
{
_tasks.Add(settings);
}
// This will block.
public TaskSettings Dequeue(CancellationToken token)
{
return _tasks.Take(token);
}
public int GetCount()
{
return _tasks.Count;
}
}
}
@@ -0,0 +1,11 @@
using System.Threading;
namespace LCU.Shared.Collections.RepoApiLib.Hosted
{
public interface IHostedTaskQueue
{
void Enqueue(TaskSettings settings);
TaskSettings Dequeue(CancellationToken token);
int GetCount();
}
}
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Hosted
{
public class TaskSettings : IValidatableObject
{
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
public string TaskUser { get; set; }
[Required]
[MaxLength(25)]
[MinLength(3)]
public string QueueRoute { get; set; }
public const string SystemUser = "System";
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (StartDate.Date > DateTime.Today)
{
results.Add(new ValidationResult("StartDate cannot be in future", new[] { "StartDate" }));
}
if (EndDate.Date < StartDate.Date)
{
results.Add(new ValidationResult("EndDate cannot be before StartDate", new[] { "EndDate" }));
}
return results;
}
}
}
@@ -0,0 +1,77 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Description>This is the models and repository code for Repo related entities.
1.0.5 Added auction assignment note
1.0.6 ?
1.0.7 Add Repo Companies
1.0.8 Add AutoIMS services
1.0.9 Add Auction Note find duplicate method
1.0.10 Add Nada service.
1.0.11 Add set floor pricing, configuration for AutoIms
1.0.12 Add basic reporting models
2.0.0 Replace EventAlert's AlertType with a message string
2.0.1 Add Searching to RepoAccount Repository
2.0.2 Add SubMessage to EventAlerts
2.0.3 Add RedemptionExpiredDate to RepoAccount
2.0.4 Add Average Days O4R to Repo to Reporting
2.0.5 Update MMR parameters in IMSAutoFileData
2.0.6 Add Refund Status Model &amp; Repository
2.0.7 Add DateClosed to RepoAccount Model
2.0.8 Add OwnershipType
2.1.0 Update Database Columns and Relationships. Breaking Changes.
2.1.1 Add RepoCompanySelection Repository
2.1.2 Add FindByCollateralIdAsync() method to RepoCompanySelection Repository
2.1.3 Set DateTimeCreated and null out Id in RepoCompanySelections Repository's AddAsync()
2.1.4 Update RepoCompanySelction to spell "RepoCompanyAssignmentDate" correctly and set AuctionAssignment IsActive field to have a default true value
2.2.0 Environment model for reporting status.
2.2.1 Add RepoManualStatus
2.2.2 Add Validation Constraints to Repo Company Selection
2.2.3 Return added collateral
2.2.4 Get Current Accounts On Hold at an auction
2.2.5 Remove repoStatus class
2.2.6 Add Additional Filter Options to RepoAccount's ListAsync() method
2.2.7 Revert saving style of AutoImsFiles
2.2.8 Add EmailRecipient and EmailBody to EventAlert
2.3.0 Create SavedLocation Table &amp; Endpoints
2.4.0 Refactor Reporting
2.4.1 Create Active Inventory Count
2.4.2 Allow Report Filtering By Status Change in Past
2.4.3 Rename GetAccountsByDateSold -&gt; GetAccountsByDateSoldInAutoIMS
2.4.4 Add 'O4RDate' to Entries &amp; add GetAccountsByO4RDate() Method to Repository
2.4.5 Add 'OrigAccountType' to Repo Table and Add BranchEntry to Models/Settings
2.4.6 Make RepoCompanyAssignments RepoType use CollectionsLib RepoType Enum
2.4.7 Add 'SixtyPlusCollector' to Repo Table
2.4.8 Updated NADA Endpoints to use REST from SOAP
</Description>
<Company>Landmark Credit Union</Company>
<Authors>Landmark Credit Union</Authors>
<RepositoryUrl>https://landmarkcu.visualstudio.com/Repo/_git/LCU.API.Collections.RepoApi</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
<Version>2.4.8.0</Version>
<PackageReleaseNotes>
2.4.8 Updated NADA Endpoints to use REST from SOAP
</PackageReleaseNotes>
<AssemblyVersion>2.4.8.0</AssemblyVersion>
<FileVersion>2.4.8.0</FileVersion>
<PackageVersion>2.4.8.0</PackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LCU.API.Collections.CollectionsApiLib" Version="1.9.1" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="Serilog" Version="2.9.0" />
<PackageReference Include="System.ServiceModel.Duplex" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.Http" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="4.4.*" />
<PackageReference Include="System.ServiceModel.Security" Version="4.4.*" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services" />
</ItemGroup>
</Project>
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class AuctionAssignment
{
[Required]
public int ID { get; set; }
[Required]
public string AuctionId { get; set; }
[Required]
public int? RepoId { get; set; }
public string AuctionCustomerNo { get; set; }
public string CollateralVIN { get; set; }
public DateTime? DateSubmitted { get; set; }
public decimal? FloorPrice { get; set; }
public int? FloorPriceResponseCode { get; set; }
public string FloorPriceResponseDescription { get; set; }
public string FloorPriceSubmissionErrors { get; set; }
public int? HoldStatus { get; set; }
public DateTime? HoldUntil { get; set; }
public DateTime? RedeemedDate { get; set; }
public int? VehicleType { get; set; }
public string BodyStyle { get; set; }
public bool? Inoperable { get; set; }
public decimal? RetailValue { get; set; }
public string AuctionNotes { get; set; }
public DateTime? AvailablePickupDate { get; set; }
public DateTime? LegalSaleDate { get; set; }
public int? CleaningLevel { get; set; }
public int? SubmissionResponseCode { get; set; }
public string SubmissionResponseDescription { get; set; }
public string SubmissionErrors { get; set; }
public DateTime? SentTitleDocsDate { get; set; }
public int? TitleSentResponseCode { get; set; }
public string TitleSentResponseDescription { get; set; }
public string TitleSentSubmissionErrors { get; set; }
public bool? AddedThroughRepoDatabase { get; set; }
public bool IsActive { get; set; }
public ImsAutoFileData AutoIMS { get; set; }
public AuctionHouse Auction { get; set; }
public IEnumerable<AuctionAssignmentToCollateral> AuctionAssignmentToCollaterals { get; set; }
public FloorPriceValuesUsed FloorPriceValuesUsed { get; set; }
}
}
@@ -0,0 +1,20 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class AuctionAssignmentNote
{
[Required]
public int Id { get; set; }
[Required]
public int AuctionAssignmentId { get; set; }
[Required]
public string AuctionCustomerNo { get; set; }
public string Origin { get; set; }
public string Writer { get; set; }
public string Type { get; set; }
public string Text { get; set; }
public DateTime? DateWritten { get; set; }
}
}
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class AuctionAssignmentToCollateral
{
[Key]
public int AuctionAssignmentId { get; set; }
[Key]
public int CollateralId { get; set; }
public AuctionAssignment AuctionAssignment { get; set; }
public Collateral Collateral { get; set; }
}
}
@@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class AuctionHouse
{
[Required]
public string AuctionID { get; set; }
[Required]
public string Name { get; set; }
public string Active { get; set; }
public string Address_Line_1 { get; set; }
public string Address_Line_2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZIP { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public decimal? Latitude { get; set; }
public decimal? Longitude { get; set; }
}
}
@@ -0,0 +1,18 @@
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class AuditRecord
{
public int ID { get; set; }
// Name of object modified
public string ClassName { get; set; }
// category of modification
public string Action { get; set; }
public string Description { get; set; }
public string PerformedBy { get; set; }
public System.DateTime DatePerformed { get; set; }
// The ID representation of the object modified
public string KeyRepresentation { get; set; }
// Don't want to use, but this is a json of the whole object currently
public string PropertyValues { get; set; }
}
}
@@ -0,0 +1,13 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.AutoIms
{
public class FtpConfiguration
{
public string HostName { get; set; }
public string UserName { get; set; }
public int Port { get; set; }
public string ExecutablePath { get; set; }
public string SshHostKeyFingerprint { get; set; }
public string SshPrivateKeyPath { get; set; }
}
}
@@ -0,0 +1,42 @@
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore.Internal;
namespace LCU.Shared.Collections.RepoApiLib.Models.AutoIms
{
public class ImportResultRow
{
public bool Success { get; set; }
public List<string> Messages { get; set; }
public string Description { get; set; }
public ImsAutoFileData Data { get; set; }
public RepoAccount RepoAccount { get; set; }
public string BuildStatusReport(string repoManagerUrl)
{
var report = new List<string>();
var success = Success ? "Success" : "Failure";
if (RepoAccount != null)
{
report.Add(CreateRepoLink(RepoAccount, repoManagerUrl));
}
if(RepoAccount == null && Data != null)
{
report.Add($"Auto IMS Update for {Data.VIN}, no Repo Account.");
}
report.Add($"{success} : {Description}");
if (Messages != null && Messages.Any())
{
report.AddRange(Messages);
}
return report.Join("<br/>");
}
public static string CreateRepoLink(RepoAccount account, string repoManagerUrl)
{
var url = repoManagerUrl + account.RepoId;
var link = string.Format("<a href={0}>{1}</a>", url, $"Account {account.RepoId} ({account.AccountNo})") ;
return link;
}
}
}
@@ -0,0 +1,71 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.AutoIms
{
/**
* This models the rows in the CSV File so that they can be different from the rows in SQL
*/
public class ImsAutoFileImportData
{
public string AnnouncedConditions { get; set; }
public string ArbitrationReason { get; set; }
public string AsIs100KMiles { get; set; }
public string AssignmentAccepted { get; set; }
public string AuctionAge { get; set; }
public string AuctionGuideBookPrice { get; set; }
public string BuyerID { get; set; }
public string BuyerName { get; set; }
public string ChargeAmount { get; set; }
public string CheckAmount { get; set; }
public string ClientAge { get; set; }
public string ClientCancelled { get; set; }
public string CollisionDamage { get; set; }
public string InspectedDate { get; set; }
public string DateofLoss { get; set; }
public string DatePickedUp { get; set; }
public string DateEnteredAutoIMS { get; set; }
public string DaysRun { get; set; }
public string DaysRunHighestBidRecordedbyAuction { get; set; }
public string DaystoDelivery { get; set; }
public string Description { get; set; }
public string Drivable { get; set; }
public string FloorPriceAccepted { get; set; }
public string FundsSent { get; set; }
public string GrossPercentFloor { get; set; }
public string HighestBid { get; set; }
public string StatedMileage { get; set; }
public string NetPercentFloor { get; set; }
public string OtherAdvanceFees { get; set; }
public string OTHERTotal { get; set; }
public string OTHERAdvancedOther { get; set; }
public string OTHERAdvancedStorage { get; set; }
public string OTHERAdvancedTow { get; set; }
public string OTHERMiscellaneous { get; set; }
public string SalePrice { get; set; }
public string ScheduledSaleDate { get; set; }
public string SoldDate { get; set; }
public string TitleNumber { get; set; }
public string TitleReceived { get; set; }
public string TitleReturned { get; set; }
public string TitleState { get; set; }
public string TitleStatus { get; set; }
public string TitleStatusfromAuction { get; set; }
public string TotalCharges { get; set; }
public string Operable { get; set; }
public string ShipmentDate { get; set; }
public string Status { get; set; }
public string VIN { get; set; }
public string StorageCost { get; set; }
public string StorageRatePerDay { get; set; }
public string TowCost { get; set; }
public string CustomerAccountNumber { get; set; }
public string DateReceivedFromAutoIMS { get; set; }
public string VehicleDecimalGradeCode { get; set; }
public string VehicleGrade { get; set; }
public string VehicleGradeApprovedCR { get; set; }
public string MMRNationalAdjustedPrice { get; set; }
public string MMRRegionalAdjustedPrice { get; set; }
public string MMR { get; set; }
public string ConditionReportLink { get; set; }
public string CollateralImagePath { get; set; }
public string AuctionAssignmentID { get; set; }
}
}
@@ -0,0 +1,22 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class Borrower
{
[Required]
public int RepoId { get; set; }
[Required]
public string IndividualId { get; set; }
[Required]
public int OwnershipType { get; set; }
[Required]
public string IndividualName { get; set; }
[ForeignKey("RepoId")]
[JsonIgnore]
public RepoAccount RepoAccount { get; set; }
}
}
@@ -0,0 +1,10 @@
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class ClientError
{
public string Message { get; set; }
public string Name { get; set; }
public string StackTrace { get; set; }
}
}
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class Collateral
{
[Required]
public int CollateralId { get; set; }
[Required]
public int RepoId { get; set; }
public string Vin { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public int? Year { get; set; }
public string Description { get; set; }
public int? VehicleType { get; set; }
public string BodyStyle { get; set; }
public bool? Inoperable { get; set; }
public int? CollateralTypeId { get; set; }
public DateTime? RetitledInLandmarkName { get; set; }
public string RefCollateralId { get; set; }
[ForeignKey("CollateralId")]
public IReadOnlyCollection<RepoCompanySelection> RepoCompanySelections { get; set; }
[ForeignKey("RepoId")]
[JsonIgnore]
public RepoAccount RepoAccount { get; set; }
[JsonIgnore]
public IEnumerable<AuctionAssignmentToCollateral> AuctionAssignmentToCollaterals { get; set; }
}
}
@@ -0,0 +1,35 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class AddressDetail
{
public int AddressId { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Line3 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public string CountyName { get; set; }
public string AddressType { get; set; }
public bool IsPrimary { get; set; }
public bool IsInternational { get; set; }
public int AddressVerification { get; set; }
public string Occupancy { get; set; }
public System.DateTime StartDate { get; set; }
public System.DateTime EndDate { get; set; }
public string LongAddress1 { get; set; }
public string LongAddress2 { get; set; }
public string[] Membership { get; set; }
public string[] CoBorrower { get; set; }
public System.DateTime UseAlternateAsOf { get; set; }
public System.DateTime RestorePrimaryAsOf { get; set; }
public string AlternateType { get; set; }
public string Comments { get; set; }
public string Met2AddressIndicator { get; set; }
public bool UspsVerified { get; set; }
public string AddressMatchStatus { get; set; }
public bool IsHSA { get; set; }
}
}
@@ -0,0 +1,25 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class AppraisalDetail
{
public decimal OriginalAppraisedValue { get; set; }
public string OriginalAppraisedBy { get; set; }
public string OriginalAppraisalType { get; set; }
public System.DateTime OriginalAppraisalDate { get; set; }
public decimal LastAppraisedValue { get; set; }
public string LastAppraisedBy { get; set; }
public string LastAppraisalType { get; set; }
public System.DateTime LastAppraisalDate { get; set; }
public bool OriginalAppraisalProvided { get; set; }
public System.DateTime OriginalDateProvided { get; set; }
public int OriginalProvidedByOperatorID { get; set; }
public string OriginalProvidedByOperatorName { get; set; }
public string OriginalDeliveryMethod { get; set; }
public bool LastAppraisalProvided { get; set; }
public System.DateTime LastDateProvided { get; set; }
public int LastProvidedByOperatorID { get; set; }
public string LastProvidedByOperatorName { get; set; }
public string LastDeliveryMethod { get; set; }
}
}
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class CollateralDetail
{
public int CollateralId { get; set; }
public int OwnerId { get; set; }
public string OwnerName { get; set; }
public string CollateralType { get; set; }
public string NameOnTitle { get; set; }
public string Description { get; set; }
public decimal PurchasePrice { get; set; }
public decimal CurrentValue { get; set; }
public string SourceOfEvaluation { get; set; }
public System.DateTime EvaluationDate { get; set; }
public int ValueVerifiedByOperatorNumber { get; set; }
public string ValueVerifiedByOperatorName { get; set; }
public string VerificationMethod { get; set; }
public System.DateTime VerificationDate { get; set; }
public int VerifiedBy { get; set; }
public string SerialNumber { get; set; }
public Vehicle Vehicle { get; set; }
public OtherCollateral Other { get; set; }
}
}
@@ -0,0 +1,16 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
// NOTE: This currently does not contain all possible fields.
// Instead, it only contains the fields necessary.
// NOTE NOTE: This class will change heavily.
public class CoreTransaction
{
public decimal? runningBalance { get; set; }
public DateTime? postingDate { get; set; }
public decimal? amount { get; set; }
public string transactionTypeCode { get; set; }
public string transactionTypeDescription { get; set; }
}
}
@@ -0,0 +1,268 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class LoanDetail
{
public long MemberId { get; set; }
public long LoanId { get; set; }
public long ExternalLoanId { get; set; }
public int[] IndividualId { get; set; }
public List<LoanOwner> Borrowers { get; set; }
public string LoanType { get; set; }
public string Title { get; set; }
public string Alerts { get; set; }
public string Product { get; set; }
public int ProductCode { get; set; }
public string Template { get; set; }
public int ProductId { get; set; }
public string ProductDescription { get; set; }
public string ProductCategory { get; set; }
public string ProductClass { get; set; }
public int AccountType { get; set; }
public string Status { get; set; }
public System.DateTime ClosedDate { get; set; }
public string Category { get; set; }
public string Classification { get; set; }
public string MetroAcctType { get; set; }
public string SMSA { get; set; }
public string Officer { get; set; }
public string OtherSecurity { get; set; }
public string NoteNumber { get; set; }
public System.DateTime LastMaintenance { get; set; }
public System.DateTime WrittenOffDate { get; set; }
public string CreditCardNumber { get; set; }
public System.DateTime LastCycleDate { get; set; }
public string LegalDescription { get; set; }
public string PropertyType { get; set; }
public string PurposeCode { get; set; }
public string CollateralCode { get; set; }
public string RefinanceCount { get; set; }
public System.DateTime LastRefinanceDate { get; set; }
public string LdcNumber { get; set; }
public string Messages { get; set; }
public decimal OriginalAmount { get; set; }
public System.DateTime OriginationDate { get; set; }
public decimal Balance { get; set; }
public decimal AvailableBalance { get; set; }
public decimal Limit { get; set; }
public decimal EscrowBalance { get; set; }
public decimal Payoff { get; set; }
public decimal UnappliedFundsBalance { get; set; }
public decimal CashAdvanceBalance { get; set; }
public decimal PurchaseAdvanceBalance { get; set; }
public decimal ActiveAuthorizationAmount { get; set; }
public decimal EscrowDividends { get; set; }
public string PledgeType { get; set; }
public string MiscCharge1 { get; set; }
public string MiscCharge2 { get; set; }
public string MiscCharge3 { get; set; }
public string MiscChargeCode1 { get; set; }
public string MiscChargeCode2 { get; set; }
public string MiscChargeCode3 { get; set; }
public decimal InterestMemoed { get; set; }
public System.DateTime InterestAccruedDate { get; set; }
public decimal PaymentInterestDue { get; set; }
public decimal PayoffInterestDue { get; set; }
public string LateChargeMethod { get; set; }
public decimal LateCharge { get; set; }
public System.DateTime LateChargeDate { get; set; }
public decimal CashAdvance { get; set; }
public string Insurance { get; set; }
public decimal LastStatementLateCharges { get; set; }
public decimal LastStatementMiscFees { get; set; }
public decimal LastStatementPurchaseAdvances { get; set; }
public decimal LastStatementCashAdvances { get; set; }
public decimal LastStatementCashAdvanceFees { get; set; }
public decimal LastStatementMiscDebits { get; set; }
public decimal LastStatementTotalPayments { get; set; }
public decimal LastStatementCreditsPosted { get; set; }
public decimal LastStatementAccruedInterest { get; set; }
public System.DateTime LastStatementDate { get; set; }
public decimal LastStatementPurchaseAdvanceBalance { get; set; }
public decimal LastStatementEndingBalance { get; set; }
public decimal DelinquentAmount { get; set; }
public decimal LastStatementMonthlyMinimum { get; set; }
public decimal LastStatementRequiredDue { get; set; }
public decimal LastStatementRequiredPayment { get; set; }
public decimal ScheduledPayment { get; set; }
public System.DateTime NextDueDate { get; set; }
public decimal PartialPaymentAmount { get; set; }
public System.DateTime PreviousDate { get; set; }
public string PaymentFrequency { get; set; }
public System.DateTime AlignmentDate { get; set; }
public string PaymentMethod { get; set; }
public string SourceAccount { get; set; }
public string ProcessingGroup { get; set; }
public System.DateTime LoanCouponDate { get; set; }
public decimal RequiredPaymentDue { get; set; }
public System.DateTime FirstPaymentDate { get; set; }
public decimal AlternatePaymentAmount { get; set; }
public System.DateTime AlternateBeginDate { get; set; }
public System.DateTime AlternateEndDate { get; set; }
public int PaymentSkips { get; set; }
public decimal FinalPaymentAmount { get; set; }
public System.DateTime FinalPaymentDate { get; set; }
public decimal CycleAmount { get; set; }
public string VariableRatePaymentChange { get; set; }
public string VariableRateCode { get; set; }
public decimal MinimumDue { get; set; }
public decimal FrequencyPayment { get; set; }
public decimal EscrowPayment { get; set; }
public decimal PrincipalAndInterestPayment { get; set; }
public string PaymentLoanDefinitionNumber { get; set; }
public string RateLoanDefinitionNumber { get; set; }
public int VacationWeeks { get; set; }
public int PayrollRepaidWeeklyPaymentCount { get; set; }
public decimal BaseRate { get; set; }
public decimal TieredRateAdj { get; set; }
public decimal ManualRateAdj { get; set; }
public decimal Rate { get; set; }
public decimal ManualRate { get; set; }
public decimal APR { get; set; }
public decimal OriginalInterestRate { get; set; }
public decimal AlternateInterestRate { get; set; }
public System.DateTime LastRateChange { get; set; }
public decimal RealEstateMargin { get; set; }
public string Amortization { get; set; }
public int AmortizationTerm { get; set; }
public int MonthlyTerm { get; set; }
public int NumberOfPayments { get; set; }
public decimal InterestYTD { get; set; }
public decimal InterestPYTD { get; set; }
public decimal InterestDaily { get; set; }
public decimal PrincipalYTD { get; set; }
public decimal PrincipalPYTD { get; set; }
public decimal LateChargeYTD { get; set; }
public decimal LateChargePYTD { get; set; }
public string PaymentHistory { get; set; }
public System.DateTime LastPaymentDue { get; set; }
public int PaymentsPastDue { get; set; }
public int DaysPastDue { get; set; }
public int MonthsPastDue { get; set; }
public decimal CurrentStatementLateCharges { get; set; }
public decimal CurrentStatementMiscFees { get; set; }
public decimal CurrentStatementPurchaseAdvances { get; set; }
public decimal CurrentStatementCashAdvances { get; set; }
public decimal CurrentStatementCashAdvanceFees { get; set; }
public decimal CurrentStatementMiscDebits { get; set; }
public decimal CurrentStatementTotalPayments { get; set; }
public decimal CurrentStatementTotalCredits { get; set; }
public System.DateTime DelinquentPaymentDueDate { get; set; }
public bool IsInactive { get; set; }
public string StatementFrequency { get; set; }
public decimal AppraisedValue { get; set; }
public int LocCycleDay { get; set; }
public bool IgnorePledge { get; set; }
public bool OpenEndPlan { get; set; }
public string OpenEndCategory { get; set; }
public decimal PointsPaid { get; set; }
public decimal CurtailmentAmount { get; set; }
public System.DateTime CurtailmentDate { get; set; }
public System.DateTime InsuranceExpirationDate { get; set; }
public string LifeInsuranceMI { get; set; }
public string DisabilityInsuranceMI { get; set; }
public string LifeActivityInsuranceCode { get; set; }
public string DisabilityActivityInsuranceCode { get; set; }
public bool LoanCoupons { get; set; }
public bool PaidbyGrace { get; set; }
public string EscrowAccount { get; set; }
public bool EscrowInterestPaid { get; set; }
public System.DateTime NextPaymentAdjustmentDate { get; set; }
public decimal EffectivePayment { get; set; }
public decimal InterestRate { get; set; }
public System.DateTime LastPaymentDate { get; set; }
public System.DateTime LastPurchaseDate { get; set; }
public System.DateTime LastCashAdvanceDate { get; set; }
public string BlockCode { get; set; }
public string ReclassCode { get; set; }
public int OutstandingAuthCount { get; set; }
public decimal OutstandingAuthAmount { get; set; }
public string InterestType { get; set; }
public string AlternateLoanNumber { get; set; }
public int ArmIndex { get; set; }
public string DeductionOption { get; set; }
public bool DelinquentPaymentSkips { get; set; }
public bool FirstPayment { get; set; }
public decimal InterestDue { get; set; }
public bool LoanLevelSkips { get; set; }
public bool PaymentReduction { get; set; }
public bool WaiveLateCharge { get; set; }
public int ExcessPaymentTargetAccountId { get; set; }
public long ExcessPaymentMemberId { get; set; }
public bool CustRate { get; set; }
public string IntRateMethod { get; set; }
public decimal Margin { get; set; }
public string Index { get; set; }
public decimal RndFactPct { get; set; }
public string RndFactOpt { get; set; }
public decimal IntRateCeiling { get; set; }
public decimal IntRateFloor { get; set; }
public decimal MaxDnRateChgLife { get; set; }
public decimal MaxUpRateChgLife { get; set; }
public decimal MaxDnRateChgPeriod { get; set; }
public decimal MaxUpRateChgPeriod { get; set; }
public decimal MinDnRateChgPeriod { get; set; }
public decimal MinUpRateChgPeriod { get; set; }
public short PmtAdjPeriod { get; set; }
public short DaysPriorToPeriodicRateAdj { get; set; }
public short DaysPriorToInitialRateAdjustment { get; set; }
public bool FirstAdjustmentIsEstimate { get; set; }
public System.DateTime InitialAnalysisEstimateDate { get; set; }
public string EstimatePerformed { get; set; }
public int BalloonTerm { get; set; }
public string PledgeTypeDescription { get; set; }
public string SystemApproved { get; set; }
public string[] VINList { get; set; }
public long? MortgageLoanOriginator { get; set; }
public decimal? LastPaymentPrincipal { get; set; }
public decimal? LastPaymentInterest { get; set; }
public decimal? LastPaymentFees { get; set; }
public decimal? LastPaymentLateCharges { get; set; }
public decimal? LastPaymentEscrowImpound { get; set; }
public decimal? LastPaymentCurtailment { get; set; }
public decimal? LastPaymentTotal { get; set; }
public short TransferDay { get; set; }
public long SourceMember { get; set; }
public bool AdjustPurchaseAccrual { get; set; }
public bool AnnualFee { get; set; }
public System.DateTime AnnualFeeDate { get; set; }
public decimal BalaceLimit { get; set; }
public bool CloseOnZero { get; set; }
public System.DateTime DrawDate { get; set; }
public string Form1098Option { get; set; }
public bool MethodADelinquency { get; set; }
public short? NumberofSkips { get; set; }
public decimal OverlimitAmount { get; set; }
public System.DateTime OverlimitDate { get; set; }
public decimal PurchaseAdvBalance { get; set; }
public System.DateTime SkipDate { get; set; }
public bool ToBeDelinquent { get; set; }
public bool WaiveDelinquencyNotice { get; set; }
public bool WaiveBillingNotice { get; set; }
public bool WaiveInterest { get; set; }
public decimal LastStatementMinimumPayment { get; set; }
public decimal LastStatementCycleRequiredPayment { get; set; }
public bool ExemptNonResident { get; set; }
public string YTDNonresidentWithholding { get; set; }
public string PYTDNonresidentWithholding { get; set; }
public string InCollection { get; set; }
public string UniversalLoanId { get; set; }
public System.DateTime RateLockDate { get; set; }
public string ActiveStopPays { get; set; }
public string[] ErrorMessage { get; set; }
}
}
@@ -0,0 +1,18 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class LoanOwner
{
public int IndividualId { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string Address { get; set; }
public string TaxId { get; set; }
public string Association { get; set; }
public System.DateTime LastAssociationCodeChangedDate { get; set; }
public string Metro2ConsumerInformationIndicator { get; set; }
public bool CoborrowerIsSpouse { get; set; }
public decimal OwnershipPercentage { get; set; }
public string PercentageDescription { get; set; }
}
}
@@ -0,0 +1,55 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class MemberDetail
{
public long MemberId { get; set; }
public string MemberName { get; set; }
public int PrimaryIndividualId { get; set; }
public string MemberType { get; set; }
public string Affiliation { get; set; }
public System.DateTime MemberSince { get; set; }
public string Miscellaneous1 { get; set; }
public string Miscellaneous2 { get; set; }
public string OriginalOpenBranch { get; set; }
public string WithholdingCode { get; set; }
public decimal ExpeditedFunds { get; set; }
public System.DateTime ExpeditedFundsDate { get; set; }
public int AccessLevel { get; set; }
public int StandardStatementCycle { get; set; }
public string StandardStatementCode { get; set; }
public string StandardStatementMethod { get; set; }
public int CATFeeCounter { get; set; }
public System.DateTime CATFeeDate { get; set; }
public int CreditCardStatementCycle { get; set; }
public string CreditCardStatementCode { get; set; }
public string CreditCardStatementMethod { get; set; }
public int AccountCount { get; set; }
public decimal AccountBalance { get; set; }
public int LoanCount { get; set; }
public decimal LoanBalance { get; set; }
public int LoansDelinquentCount { get; set; }
public decimal LoansDelinquent { get; set; }
public int LoansWrittenOffCount { get; set; }
public decimal LoansWrittenOff { get; set; }
public int LoansInCollectionCount { get; set; }
public decimal LoansInCollection { get; set; }
// public AccountSummary[] Account { get; set; }
// public LoanSummary[] Loan { get; set; }
// public CrossMemberDetails[] CrossMember { get; set; }
public string Password { get; set; }
public string PinLock { get; set; }
public int BranchId { get; set; }
public int RelationshipPricingLevel { get; set; }
public string RelationshipPricingLevelPermanent { get; set; }
public string RelationshipPricingDescription { get; set; }
public int PreviousRelationshipPricingLevel { get; set; }
public string LastRelationshipPricingLevelAnalysisDate { get; set; }
public string LastRelationshipPricingLevelChangeDate { get; set; }
public string InhibitActivity { get; set; }
public string WrittenOffLoan { get; set; }
public string LoanInCollection { get; set; }
public string PurgeMembership { get; set; }
public AddressDetail Address { get; set; }
}
}
@@ -0,0 +1,10 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class OtherCollateral
{
public string MiscellaneousInformation { get; set; }
public AppraisalDetail Appraisal { get; set; }
public string OtherCollateralType { get; set; }
}
}
@@ -0,0 +1,11 @@
using LCU.Shared.Collections.RepoApiLib.Models.Producer;
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class QueueResult
{
public ulong DeliveryTag { get; set; }
public ProcessingReceipt Receipt { get; set; }
}
}
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using LCU.Shared.Collections.RepoApiLib.Models.Producer;
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class RepoRunInfo
{
public RepoRunInfo()
{
StartDateTime = DateTime.Now;
Receipts = new List<ProcessingReceipt>();
}
public DateTime StartDateTime { get; private set; }
public DateTime? CompleteDateTime { get; set; }
public List<ProcessingReceipt> Receipts { get; private set; }
}
}
@@ -0,0 +1,20 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Consumer
{
public class Vehicle
{
public string VIN { get; set; }
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string LicensePlate { get; set; }
public string LicenseState { get; set; }
public string CountryLicensed { get; set; }
public int Mileage { get; set; }
public string BodyStyle { get; set; }
public string Color { get; set; }
public string KeyCode { get; set; }
public string SellerName { get; set; }
public decimal LowBookValue { get; set; }
public decimal HighBookValue { get; set; }
}
}
@@ -0,0 +1,33 @@
using System;
using System.Reflection;
using Microsoft.AspNetCore.Hosting;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class EnvironmentView : IEnvironmentView
{
public string Application => _env.ApplicationName;
public DateTime CurrentDate => DateTime.Now;
public string BuildVersion => Assembly.GetExecutingAssembly().GetName().Version.ToString();
public DateTime BuildDate => AssemblyBuildDate();
public string Environment => _env.EnvironmentName;
private readonly IHostingEnvironment _env;
public EnvironmentView(IHostingEnvironment env)
{
_env = env;
}
public static DateTime AssemblyBuildDate()
{
//https://stackoverflow.com/a/804310/266594
//TODO #246: Look up this value at start up to avoid hitting the filesystem repeatedly
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.FileInfo fileInfo = new System.IO.FileInfo(assembly.Location);
DateTime lastModified = fileInfo.LastWriteTime;
return lastModified;
}
}
}
@@ -0,0 +1,26 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class EventAlert
{
public int Id { get; set; }
public int? RepoId { get; set; }
[Required]
public string AccountNo { get; set; }
[Required]
public DateTime DateAdded { get; set; }
public DateTime? DateMarkedRead { get; set; }
[Required]
[MaxLength(25)]
public string CreatedBy { get; set; }
public string MarkedReadBy { get; set; }
[Required]
public string Message { get; set; }
public int? DayCount { get; set; }
public string SubMessage { get; set; }
public string EmailRecipient { get; set; }
public string EmailBody { get; set; }
}
}
@@ -0,0 +1,19 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class ExternalUser
{
[Required]
public int Id { get; set; }
[Required]
public int ReferenceId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Code { get; set; }
}
}
@@ -0,0 +1,13 @@
using System.Collections.Generic;
using LCU.Shared.Collections.RepoApiLib.WebServices.NADA;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class FloorPriceCalculationParams
{
public ImsAutoFileData ImsAutoFileData { get; set; }
public CollateralValuation CollateralValuation { get; set; }
public IEnumerable<VehicleFloorPricingParameters> VehicleFloorPricingParameters { get; set; }
}
}
@@ -0,0 +1,13 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class FloorPriceCalculationResult
{
public string StrategyName { get; set; }
public bool Success { get; set; }
public decimal FloorPrice { get; set; }
public int ResultWeight { get; set; }
public string FailureReason { get; set; }
}
}
@@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class FloorPriceCalculationResultSet
{
public FloorPriceCalculationResult PrimaryResult { get; set; }
public IEnumerable<FloorPriceCalculationResult> AllResults { get; set; }
public FloorPriceValuesUsed FloorPriceValuesUsed { get; set; }
}
}
@@ -0,0 +1,37 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using LCU.Shared.Collections.RepoApiLib.WebServices.NADA;
using Newtonsoft.Json;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class FloorPriceValuesUsed
{
[Required]
public int AuctionAssignmentId { get; set; }
[Required]
public int RepoId { get; set; }
[Required]
public int CollateralValuationId { get; set; }
public decimal? Condition { get; set; }
public decimal LowParam { get; set; }
public decimal HighParam { get; set; }
public decimal PercentageOf { get; set; }
public decimal? AuctionGuideBookPrice { get; set; }
public bool WasAuctionGuideBookPriceUsed { get; set; }
public decimal? MMRNationalAdjustedPrice { get; set; }
public decimal? MMRRegionalAdjustedPrice { get; set; }
public bool WasMMRNationalAdjustedPriceUsed { get; set; }
public bool WasMMRRegionalAdjustedPriceUsed { get; set; }
public int NADALowAdjustedAuctionValue { get; set; }
public int NADAAverageAdjustedAuctionValue { get; set; }
public int NADAHighAdjustedAuctionValue { get; set; }
public bool WasNADALowAdjustedAuctionValueUsed { get; set; }
public bool WasNADAAverageAdjustedAuctionValueUsed { get; set; }
public bool WasNADAHighAdjustedAuctionValueUsed { get; set; }
public decimal? NADAMMRFloorPrice { get; set; }
public CollateralValuation CollateralValuation { get; set; }
}
}
@@ -0,0 +1,13 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public interface IEnvironmentView
{
string Application { get; }
DateTime CurrentDate { get; }
string BuildVersion { get; }
DateTime BuildDate { get; }
string Environment { get; }
}
}
@@ -0,0 +1,77 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class ImsAutoFileData
{
[Required]
public int RepoId { get; set; }
[Required]
public string VIN { get; set; }
[Required]
public int AuctionAssignmentId { get; set; }
[Required]
public string AuctionCustomerNo { get; set; }
public DateTime? AssignmentAccepted { get; set; }
public DateTime? DateReceivedFromAutoIMS { get; set; }
public DateTime? ScheduledSaleDate { get; set; }
public DateTime? SoldDate { get; set; }
public string AnnouncedConditions { get; set; }
public string ArbitrationReason { get; set; }
public bool? AsIs100KMiles { get; set; }
public int? AuctionAge { get; set; }
public decimal? AuctionGuideBookPrice { get; set; }
public string BuyerId { get; set; }
public string BuyerName { get; set; }
public decimal? ChargeAmount { get; set; }
public decimal? CheckAmount { get; set; }
public int? ClientAge { get; set; }
public DateTime? ClientCancelled { get; set; }
public string CollisionDamage { get; set; }
public DateTime? InspectedDate { get; set; }
public DateTime? DateofLoss { get; set; }
public DateTime? DatePickedUp { get; set; }
public DateTime? DateEnteredAutoIMS { get; set; }
public int? DaysRun { get; set; }
public string DaysRunHighestBidRecordedbyAuction { get; set; }
public int? DaystoDelivery { get; set; }
public string Description { get; set; }
public bool? IsDrivable { get; set; }
public decimal? FloorPriceAccepted { get; set; }
public DateTime? FundsSent { get; set; }
public decimal? GrossPercentFloor { get; set; }
public decimal? HighestBid { get; set; }
public int? StatedMileage { get; set; }
public decimal? NetPercentFloor { get; set; }
public decimal? OtherAdvanceFees { get; set; }
public string OTHERTotal { get; set; }
public string OTHERAdvancedOther { get; set; }
public string OTHERAdvancedStorage { get; set; }
public string OTHERAdvancedTow { get; set; }
public string OTHERMiscellaneous { get; set; }
public decimal? SalePrice { get; set; }
public string TitleNumber { get; set; }
public DateTime? TitleReceived { get; set; }
public DateTime? TitleReturned { get; set; }
public string TitleState { get; set; }
public string TitleStatus { get; set; }
public string TitleStatusfromAuction { get; set; }
public decimal? TotalCharges { get; set; }
public decimal? ApprovedVehicleGrade { get; set; }
public bool? IsOperable { get; set; }
public DateTime? ShipmentDate { get; set; }
public string Status { get; set; }
public decimal? StorageCost { get; set; }
public decimal? StorageRatePerDay { get; set; }
public decimal? TowCost { get; set; }
public decimal? VehicleDecimalGradeCode { get; set; }
public decimal? VehicleGrade { get; set; }
public decimal? MMRNationalAdjustedPrice { get; set; }
public decimal? MMRRegionalAdjustedPrice { get; set; }
public string MMR { get; set; }
public string ConditionReportLink { get; set; }
public string CollateralImagePath { get; set; }
}
}
@@ -0,0 +1,20 @@
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class Letter
{
public string ActionCode { get; set; }
// This is the eventual "This works and the code was written well" solution.
// Once letter codes are in place and agreed upon the alerts can be switched from ActionCode to LetterCode
public string LetterCode { get; set; }
public string Description { get; set; }
public int? DaysToWait { get; set; }
public string WhenLetterIsSent { get; set; }
// This is currently used to match up descriptions from Temenos history/comments. Used to find if a specific
// ActionCode/LetterCode was sent.
public string LetterDescription { get; set; }
}
}
@@ -0,0 +1,9 @@
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public enum OwnershipType
{
Other = 1,
Coborrower = 3,
Borrower = 6
}
}
@@ -0,0 +1,37 @@
using System;
using System.ComponentModel.DataAnnotations;
using LCU.Shared.Collections.RepoApiLib.Models.Producer;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class ProcessingReceipt
{
public ProcessingReceipt(string accountNo)
{
AccountNo = accountNo;
AccountId = "";
QueuedBy = "Unknown";
Message = "";
Outcome = RepoProcessingResult.Error;
Processed = DateTime.Now;
}
public string AccountNo { get; protected set; }
[Required]
public string AccountId { get; set; }
[Required]
public string CaseId { get; set; }
[Required]
[MaxLength(40)]
public string QueuedBy { get; set; }
public RepoProcessingResult Outcome { get; set; }
public string Message { get; set; }
public DateTime Processed { get; set; }
public string Pretty()
{
return $"Key: {AccountNo}|{AccountId}|{CaseId}|{QueuedBy} -> {Outcome} : {Message}";
}
}
}
@@ -0,0 +1,18 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models.Producer
{
public class ProcessingItem
{
public string AccountNo { get; set; }
public string AccountId { get; set; }
public string CaseId { get; set; }
public string QueuedBy { get; set; }
public string DetermineAuditItemKey()
{
return AccountNo + ":" + CaseId;
}
}
}
@@ -0,0 +1,13 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Producer
{
public enum RepoProcessingResult
{
Autoclosed,
Unconverted,
Created,
Updated,
Ineligible,
MissingRequirement,
Error
}
}
@@ -0,0 +1,16 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RefundStatus
{
[Required]
public int? RepoId { get; set; }
public string WarrantyRefundStatus { get; set; }
public string InsuranceRefundStatus { get; set; }
public string PremiumDefiRefundStatus { get; set; }
public string CPIRefundStatus { get; set; }
public DateTime? RefundsReceivedDate { get; set; }
}
}
@@ -0,0 +1,58 @@
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoAccount
{
public int RepoId { get; set; }
[Required]
public string AccountNo { get; set; }
[Required]
public string Status { get; set; }
public long MemberNo { get; set; }
public long LoanNo { get; set; }
public string AccountTypeCode { get; set; }
public string OrigAccountTypeCode { get; set; }
public int? Branch { get; set; }
public string Collector { get; set; }
public decimal? Balance { get; set; }
public DateTime? DueToPayDate { get; set; }
public DateTime? O4RDate { get; set; }
public DateTime? DateFirstDelinquent { get; set; }
public decimal? DelinquentAmount { get; set; }
public int? DaysDelinquent { get; set; }
public decimal? PaidSkipAmount { get; set; }
public string SubStatus { get; set; }
public decimal? RequiredPaymentAmount { get; set; }
public decimal? CurrentDelinquentAmount { get; set; }
public decimal? LstPmtAmt { get; set; }
public decimal? OrigAmount { get; set; }
public DateTime? LastPaymentDate { get; set; }
public DateTime? DateFirstIntellect { get; set; }
public string PrimaryIndividualId { get; set; }
public string Bankruptcy { get; set; }
public DateTime? ManualRedemptionDate { get; set; }
public DateTime? RedemptionExpiredDate { get; set; }
public ICollection<Borrower> Borrowers { get; set; }
public ICollection<Collateral> Collaterals { get; set; }
public ICollection<RepoStatusChange> RepoStatusChanges { get; set; }
[ForeignKey("RepoId")]
public RefundStatus RefundStatus { get; set; }
public DateTime? DateClosed { get; set; }
// This should reference
// a CaseId for Temenos.
public int? ReferenceId { get; set; }
public int? ReferenceCaseId { get; set; }
// This is the "Account Status" from Temenos so we can "Watch" it.
public string ReferenceStatus { get; set; }
public DateTime? AccountLastProcessed { get; set; }
public DateTime? WrittenOffDate { get; set; }
public int? SixtyPlusCollectorId { get; set; }
[ForeignKey("SixtyPlusCollectorId")]
public SixtyPlusCollector SixtyPlusCollector { get; set; }
}
}
@@ -0,0 +1,23 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoCompany
{
public int ID { get; set; }
public int? ReferenceId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Address_Line_1 { get; set; }
public string Address_Line_2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZIP { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string DisabledBy { get; set; }
public DateTime? DisabledDate { get; set; }
}
}
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using LCU.API.Collections.CollectionsApiLib.Models;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoCompanySelection : IValidatableObject
{
public int? Id { get; set; }
[Required]
public int? CollateralId { get; set; }
public RepoType RepoType { get; set; }
public int? RepoCompanyId { get; set; }
public DateTime? RepoCompanyAssignmentDate { get; set; }
public DateTime? DateRepoed { get; set; }
public DateTime? DateTimeCreated { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var failedValidations = new List<ValidationResult>();
// This cannot be a required field on account of it resulting in a SQL error
if (RepoType == null)
{
failedValidations.Add(new ValidationResult("Repo Company Selection: The RepoType cannot be blank"));
}
if (RepoCompanyAssignmentDate > DateRepoed)
{
failedValidations.Add(new ValidationResult("Repo Company Selection: The date repoed cannot come before the date assigned."));
}
if (RepoCompanyId != null && RepoCompanyAssignmentDate == null)
{
failedValidations.Add(new ValidationResult("Repo Company Selection: The Repo Company Assignment date cannot be null when a Repo Company is set."));
}
return failedValidations;
}
}
}
@@ -0,0 +1,14 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoLetter
{
public string NoticeType { get; set; }
public DateTime DateSent { get; set; }
public DateTime DateExpired { get; set; }
public int DaysToRedeem { get; set; }
public string ActionCode { get; set; }
}
}
@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoManualStatus
{
[Required]
public int ID { get; set; }
[Required]
public string Description { get; set; }
[Required]
public bool IsActiveStatus { get; set; }
[Required]
public bool WatchForStatusChanges { get; set; }
}
}
@@ -0,0 +1,28 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class RepoStatusChange
{
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public int RepoId { get; set; }
[Required]
public string StatusFrom { get; set; }
[Required]
public string StatusTo { get; set; }
[Required]
public string ChangedBy { get; set; }
[Required]
public DateTime ChangedDate { get; set; }
[ForeignKey("RepoId")]
[JsonIgnore]
public RepoAccount RepoAccount { get; set; }
}
}
@@ -0,0 +1,47 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting
{
public class LandmarkReportAccountEntry
{
// Repo
public int RepoId { get; set; }
public string AccountNo { get; set; }
public decimal? Balance { get; set; }
public int? DaysDelinquent { get; set; }
public DateTime? LastPaymentDate { get; set; }
public decimal? LastPaymentAmount { get; set; }
public string AccountTypeCode { get; set; }
public string Bankruptcy { get; set; }
public decimal? DelinquentAmount { get; set; }
public string Collector { get; set; }
public DateTime? DateClosed { get; set; }
// Borrower
public string IndividualName { get; set; }
// Collateral
public string Make { get; set; }
public string Model { get; set; }
public int? Year { get; set; }
// RepoCompanySelection
public string RepoCompany { get; set; }
public DateTime? DateRepoed { get; set; }
public string RepoType { get; set; }
public DateTime? DateAssigned { get; set; }
// RepoStatusChange
public string Status { get; set; }
public int? DaysInStatus { get; set; }
// IMSAutoFile Data
public DateTime? SoldDate { get; set; }
public DateTime? DateEnteredAutoIMS { get; set; }
public DateTime? ScheduledSaleDate { get; set; }
public decimal? FloorPrice { get; set; }
public decimal? Grade { get; set; }
// Auction and AuctionAssignments
public string AuctionHouse { get; set; }
public DateTime? AuctionDate { get; set; }
public decimal? TotalCharges { get; set; }
public decimal? GrossPercentFloor { get; set; }
public decimal? NetPercentFloor { get; set; }
public decimal? GrossSalePrice { get; set; }
}
}
@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses
{
public class DataTable
{
public string[] Headers { get; set; }
public IEnumerable<RepoAccountReferenceRow> Rows { get; set; }
}
}
@@ -0,0 +1,8 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses
{
public class RepoAccountReferenceRow
{
public int RepoId { get; set; }
public ReportCell[] Cells { get; set; }
}
}
@@ -0,0 +1,8 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses
{
public class ReportCell
{
public string Display { get; set; }
public object Value { get; set; }
}
}
@@ -0,0 +1,8 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses
{
public class ReportTable
{
public string[] Headers { get; set; }
public ReportCell[,] Cells { get; set; }
}
}
@@ -0,0 +1,8 @@
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses
{
public class ReportTableResponse
{
public ReportTable ReportTable { get; set; }
public DataTable DataTable { get; set; }
}
}
@@ -0,0 +1,53 @@
using System;
namespace LCU.Shared.Collections.RepoApiLib.Models.Reporting
{
public class StdReportEntry
{
// Repo
public int RepoId { get; set; }
public string AccountNo { get; set; }
public string AccountTypeCode { get; set; }
public decimal Balance { get; set; }
public string Status { get; set; }
public int DaysInStatus { get; set; }
public string Bankruptcy { get; set; }
public string Collector { get; set; }
public int? DaysCurrentDelq { get; set; }
public int? DaysDelqWhenAdded { get; set; }
public decimal? DelinquentAmount { get; set; }
public decimal? LastPaymentAmount { get; set; }
public DateTime? LastPaymentDate { get; set; }
public string FilteredStatus { get; set; }
public DateTime? FilteredStatusChangeDate { get; set; }
public DateTime? O4RDate { get; set; }
// Auction Assignment
public string AuctionId { get; set; }
public string AuctionName { get; set; }
// Collateral
public int CollateralId { get; set; }
public int? RepoCompanyId { get; set; }
public string RepoCompany { get; set; }
public string RepoType { get; set; }
public DateTime? RepoCompanyAssignmentDate { get; set; }
public DateTime? DateRepoed { get; set; }
public int? RepoDuration { get; set; }
public int? Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
// IMSAutoFile Data
public string AutoImsStatus { get; set; }
public DateTime? SoldDate { get; set; }
public DateTime? DateEnteredAutoIMS { get; set; }
public DateTime? ScheduledSaleDate { get; set; }
public decimal? GrossPercentFloor { get; set; }
public decimal? NetPercentFloor { get; set; }
public decimal? TotalCharges { get; set; }
public decimal? Grade { get; set; }
public decimal? FloorPrice { get; set; }
public decimal? GrossSalePrice { get; set; }
// Borrower
public string IndividualName { get; set; }
}
}
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace LCU.Shared.Collections.RepoApiLib.Models.Results
{
public class AuctionData
{
public int LowAuction { get; set; }
public int AvgAuction { get; set; }
public int HighAuction { get; set; }
public string DateRange { get; set; }
public object AuctionAccessories { get; set; }
public string AcceptableMileage { get; set; }
public string RatePerMile { get; set; }
public string MileageAdjust { get; set; }
public string MinAuctionValue { get; set; }
}
}
@@ -0,0 +1,13 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Results
{
public class AuctionInformation
{
public string RequestId { get; set; }
public List<AuctionData> Result { get; set; }
public string Userinfo { get; set; }
public string Error { get; set; }
public string AuthId { get; set; }
}
}
@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Results
{
public class PagedResult<T> where T : class
{
public IEnumerable<T> Items { get; set; }
public int Total { get; set; }
}
}
@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace LCU.Shared.Collections.RepoApiLib.Models.Results
{
public class VehicleData
{
public int Modelyear { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Body { get; set; }
public int Ucgvehicleid { get; set; }
public string Vehicletype { get; set; }
public string Mileageclass { get; set; }
public string Basemsrp { get; set; }
public string Bodytype { get; set; }
public string Doors { get; set; }
public string Trim { get; set; }
public string Trim2 { get; set; }
public string Drivetype { get; set; }
public string Liters { get; set; }
public string Engineconfiguration { get; set; }
public string Cylinders { get; set; }
public string Inductiontype { get; set; }
public string Transmission { get; set; }
public string Fueltype { get; set; }
public string Wheels { get; set; }
public string Curbweight { get; set; }
public string Gvw { get; set; }
public string Gcw { get; set; }
public string Ucgsubsegment { get; set; }
public string Modelnumber { get; set; }
public int Rollupvehicleid { get; set; }
public int Basecleantrade { get; set; }
public int Baseaveragetrade { get; set; }
public int Baseroughtrade { get; set; }
public int Basecleanretail { get; set; }
public int Baseloan { get; set; }
public int Averagemileage { get; set; }
public int Mileageadjustment { get; set; }
public int Vinoptionstrade { get; set; }
public int Vinoptionsretail { get; set; }
public int Vinoptionsloan { get; set; }
public int Adjustedcleantrade { get; set; }
public int Adjustedaveragetrade { get; set; }
public int Adjustedroughtrade { get; set; }
public int Adjustedcleanretail { get; set; }
public int Adjustedloan { get; set; }
public int Maxmileageadj { get; set; }
public int Minmileageadj { get; set; }
public int Minadjretail { get; set; }
public int Minadjcleantrade { get; set; }
public int Minadjaveragetrade { get; set; }
public int Minadjroughtrade { get; set; }
public int Minadjloan { get; set; }
public int Minadjretailforloan { get; set; }
public int Vid { get; set; }
}
}
@@ -0,0 +1,13 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Results
{
public class VehicleInformation
{
public string RequestId { get; set; }
public List<VehicleData> Result { get; set; }
public string Userinfo { get; set; }
private string AdjustedMileage { get; set; }
private string AuthId { get; set; }
}
}
@@ -0,0 +1,35 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class SavedLocation
{
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int? LocationType { get; set; }
[Required]
public string Address_Line_1 { get; set; }
public string Address_Line_2 { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
[Required]
public string ZIP { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
}
}
@@ -0,0 +1,23 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class AccountType
{
[Required]
public int ID { get; set; }
[Required]
public string AccountTypeCode { get; set; }
[Required]
public string Description { get; set; }
[Required]
public bool IsVisible { get; set; }
public int? CategoryId { get; set; }
[ForeignKey("ID")]
[JsonIgnore]
public LoanCategory LoanCategories { get; set; }
}
}
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class AllowedStatusChange
{
[Required]
public int ID { get; set; }
[Required]
public string CurrentStatus { get; set; }
[Required]
public string AllowedChangeStatus { get; set; }
}
}
@@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class BodyStyle
{
[Required]
public string Code { get; set; }
[Required]
public string Description { get; set; }
}
}
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class BranchEntry
{
public string BranchId { get; set; }
public string BranchName { get; set; }
}
}
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class CleaningLevel
{
[Required]
public int Code { get; set; }
[Required]
public string Description { get; set; }
}
}
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class CollateralType
{
[Required]
public int ID { get; set; }
[Required]
public string Description { get; set; }
[Required]
public string LookupHandler { get; set; }
}
}
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class CollateralTypeToVehicleType
{
[Required]
public int ID { get; set; }
[Required]
public int CollateralTypeId { get; set; }
[Required]
public int VehicleTypeId { get; set; }
}
}
@@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class HoldStatus
{
[Required]
public int Code { get; set; }
[Required]
public string Description { get; set; }
}
}
@@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class LoanCategory
{
[Required]
public int ID { get; set; }
[Required]
public string CategoryName { get; set; }
}
}
@@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class LocationType
{
[Required]
public int Code { get; set; }
[Required]
public string Description { get; set; }
}
}
@@ -0,0 +1,26 @@
using System.Collections.Generic;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class Settings
{
public IEnumerable<AccountType> AccountTypes { get; set; }
public IEnumerable<AllowedStatusChange> AllowedStatusChanges { get; set; }
public IEnumerable<BodyStyle> BodyStyles { get; set; }
public IEnumerable<CleaningLevel> CleaningLevels { get; set; }
public IEnumerable<CollateralType> CollateralTypes { get; set; }
public IEnumerable<CollateralTypeToVehicleType> CollateralTypesToVehicleTypes { get; set; }
public IEnumerable<HoldStatus> HoldStatuses { get; set; }
public IEnumerable<LoanCategory> LoanCategories { get; set; }
public IEnumerable<LocationType> LocationTypes { get; set; }
public IEnumerable<VehicleType> VehicleTypes { get; set; }
public IEnumerable<BranchEntry> BranchSet { get; set; }
public IReadOnlyCollection<ExternalUser> ExternalUsers { get; set; }
public IReadOnlyCollection<RepoCompany> RepoCompanies { get; set; }
public IReadOnlyCollection<string> TransactionTypeCodes { get; set; }
public string TransactionTypeCodeQueryPrefix { get; set; }
public string TransactionHistoryParameterDateFormat { get; set; }
public int TransactionHistoryStartDateOffset { get; set; }
public IReadOnlyDictionary<int, string> RepoTypeMap { get; set; }
}
}
@@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models.Settings
{
public class VehicleType
{
[Required]
public string Code { get; set; }
[Required]
public string Description { get; set; }
}
}
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class SixtyPlusCollector
{
[Required]
public int SixtyPlusCollectorId { get; set; }
[Required]
public string SixtyPlusCollectorName { get; set; }
}
}
@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Shared.Collections.RepoApiLib.Models
{
public class VehicleFloorPricingParameters
{
[Required]
public int Id { get; set; }
public decimal LowCondition { get; set; }
public decimal HighCondition { get; set; }
public string NADAFirstValue { get; set; }
public string NADASecondValue { get; set; }
public string MMRAdjustedValue { get; set; }
public decimal PercentageOf { get; set; }
public int ValuationServiceType { get; set; }
}
}
@@ -0,0 +1,447 @@
using System;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Producer;
using LCU.Shared.Collections.RepoApiLib.Models.Reporting;
using LCU.Shared.Collections.RepoApiLib.Models.Settings;
using LCU.Shared.Collections.RepoApiLib.WebServices.NADA;
using LCU.API.Collections.CollectionsApiLib.Models;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Persistence
{
public class AppDbContext : DbContext
{
public DbSet<AccountType> AccountTypeCodes { get; set; }
public DbSet<AllowedStatusChange> AllowedStatusChanges { get; set; }
public DbSet<AuctionHouse> Auctions { get; set; }
public DbSet<AuctionAssignment> AuctionAssignments { get; set; }
public DbSet<AuctionAssignmentNote> AuctionAssignmentNotes { get; set; }
public DbSet<AuditRecord> AuditRecords { get; set; }
public DbSet<BodyStyle> BodyStyleCodes { get; set; }
public DbSet<Borrower> Borrowers { get; set; }
public DbSet<CleaningLevel> CleaningLevelCodes { get; set; }
public DbSet<Collateral> Collaterals { get; set; }
public DbSet<CollateralType> CollateralTypes { get; set; }
public DbSet<CollateralTypeToVehicleType> CollateralTypesToVehicleTypes { get; set; }
public DbSet<EventAlert> EventAlerts { get; set; }
public DbSet<FloorPriceValuesUsed> FloorPriceValuesUsed { get; set; }
public DbSet<HoldStatus> HoldStatusCodes { get; set; }
public DbSet<ImsAutoFileData> ImsAutoFileData { get; set; }
public DbSet<Letter> Letters { get; set; }
public DbSet<LoanCategory> LoanCategories { get; set; }
public DbSet<LocationType> LocationTypeCodes { get; set; }
public DbSet<ProcessingReceipt> ProcessingReceipts { get; set; }
public DbSet<RepoAccount> RepoAccounts { get; set; }
public DbSet<RepoCompany> RepoCompanies { get; set; }
public DbSet<RepoManualStatus> RepoManualStatuses { get; set; }
public DbSet<RepoStatusChange> RepoStatusChanges { get; set; }
public DbSet<VehicleType> VehicleTypeCodes { get; set; }
public DbSet<VehicleFloorPricingParameters> VehicleFloorPricingParameters { get; set; }
public DbSet<RefundStatus> RefundStatuses { get; set; }
public DbSet<AuctionAssignmentToCollateral> AuctionAssignmentToCollaterals { get; set; }
public DbSet<RepoCompanySelection> RepoCompanySelections { get; set; }
public DbSet<SavedLocation> SavedLocations { get; set; }
public DbSet<ExternalUser> ExternalUsers { get; set; }
public DbSet<SixtyPlusCollector> SixtyPLusCollectors { get; set; }
// Queries for Reporting / etc
public DbQuery<StdReportEntry> StandardReportEntries { get; set; }
public DbQuery<LandmarkReportAccountEntry> ActiveAccountEntries { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<EventAlert>().ToTable("EventAlert");
builder.Entity<EventAlert>().HasKey(p => p.Id);
builder.Entity<EventAlert>().Property(p => p.Id).IsRequired().ValueGeneratedOnAdd();
builder.Entity<EventAlert>().Property(p => p.AccountNo).IsRequired();
builder.Entity<EventAlert>().Property(p => p.DateAdded).IsRequired().ValueGeneratedOnAdd();
builder.Entity<EventAlert>().Property(p => p.CreatedBy).IsRequired().HasMaxLength(25);
builder.Entity<EventAlert>().Property(p => p.Message).IsRequired();
builder.Entity<EventAlert>().Property(p => p.EmailRecipient);
builder.Entity<EventAlert>().Property(p => p.EmailBody);
builder.Entity<Borrower>().ToTable("Borrowers");
builder.Entity<Borrower>().HasKey(p => new {p.RepoId, p.IndividualId});
builder.Entity<Borrower>().Property(p => p.IndividualName).IsRequired();
builder.Entity<Borrower>().Property(p => p.OwnershipType).IsRequired();
builder.Entity<ProcessingReceipt>().ToTable("ProcessingReceipt");
builder.Entity<ProcessingReceipt>().HasKey(p => new { p.AccountNo, p.AccountId, p.CaseId });
builder.Entity<ProcessingReceipt>().Property(p => p.AccountId);
builder.Entity<ProcessingReceipt>().Property(p => p.CaseId);
builder.Entity<ProcessingReceipt>().Property(p => p.QueuedBy);
builder.Entity<ProcessingReceipt>().Property(p => p.Message);
//TODO: DO this for repocompanyselection repo type
builder.Entity<ProcessingReceipt>().Property(p => p.Outcome)
.HasConversion(x => x.ToString(),
x => (RepoProcessingResult) Enum.Parse(typeof(RepoProcessingResult), x));
builder.Entity<ProcessingReceipt>().Property(p => p.Processed);
builder.Entity<RepoAccount>().ToTable("Repos");
builder.Entity<RepoAccount>().HasKey(p => p.RepoId);
builder.Entity<RepoAccount>().Property(p => p.RepoId).IsRequired().ValueGeneratedOnAdd();
builder.Entity<RepoAccount>().Property(p => p.AccountNo).IsRequired();
builder.Entity<RepoAccount>().Property(p => p.Status).IsRequired();
builder.Entity<RepoAccount>().Property(p => p.SubStatus);
builder.Entity<RepoAccount>().HasMany(p => p.Borrowers);
builder.Entity<RepoAccount>().HasMany(p => p.Collaterals);
builder.Entity<RepoAccount>().HasMany(p => p.RepoStatusChanges);
builder.Entity<RepoAccount>().OwnsOne(p => p.RefundStatus);
builder.Entity<RepoAccount>().Property(p => p.RedemptionExpiredDate);
builder.Entity<RepoAccount>().HasOne(p => p.SixtyPlusCollector);
builder.Entity<RepoStatusChange>().ToTable("RepoStatusChanges");
builder.Entity<RepoStatusChange>().HasKey(p => new {p.RepoId, p.Id});
builder.Entity<RepoStatusChange>().Property(p => p.RepoId).IsRequired();
builder.Entity<RepoStatusChange>().Property(p => p.StatusFrom).IsRequired();
builder.Entity<RepoStatusChange>().Property(p => p.StatusTo).IsRequired();
builder.Entity<RepoStatusChange>().Property(p => p.ChangedBy).IsRequired();
builder.Entity<RepoStatusChange>().Property(p => p.ChangedDate).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AuditRecord>().ToTable("AuditTable");
builder.Entity<AuditRecord>().HasKey(p => p.ID);
builder.Entity<AuditRecord>().Property(p => p.DatePerformed).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AuditRecord>().Property(p => p.Description).IsRequired();
builder.Entity<AuditRecord>().Property(p => p.Action).IsRequired();
builder.Entity<AuditRecord>().Property(p => p.ClassName).IsRequired();
builder.Entity<AuditRecord>().Property(p => p.PerformedBy).IsRequired();
builder.Entity<AuditRecord>().Property(p => p.KeyRepresentation).IsRequired();
builder.Entity<AuditRecord>().Property(p => p.PropertyValues);
builder.Entity<Collateral>().ToTable("Collaterals");
builder.Entity<Collateral>().HasKey(p => p.CollateralId);
builder.Entity<Collateral>().Property(p => p.CollateralId).IsRequired().ValueGeneratedOnAdd();
builder.Entity<Collateral>().Property(p => p.RepoId).IsRequired();
builder.Entity<Collateral>().Property(p => p.Vin);
builder.Entity<Collateral>().Property(p => p.Make);
builder.Entity<Collateral>().Property(p => p.Model);
builder.Entity<Collateral>().Property(p => p.Year);
builder.Entity<Collateral>().Property(p => p.Description);
builder.Entity<Collateral>().Property(p => p.VehicleType);
builder.Entity<Collateral>().Property(p => p.BodyStyle);
builder.Entity<Collateral>().Property(p => p.Inoperable);
builder.Entity<Collateral>().Property(p => p.CollateralTypeId);
builder.Entity<Collateral>().Property(p => p.RetitledInLandmarkName);
builder.Entity<Collateral>().Property(p => p.RefCollateralId);
builder.Entity<Collateral>().HasMany(p => p.AuctionAssignmentToCollaterals);
builder.Entity<Collateral>().HasMany(p => p.RepoCompanySelections);
builder.Entity<RepoManualStatus>().ToTable("RepoManualStatus");
builder.Entity<RepoManualStatus>().HasKey(p => p.ID);
builder.Entity<RepoManualStatus>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<RepoManualStatus>().Property(p => p.Description).IsRequired();
builder.Entity<RepoManualStatus>().Property(p => p.IsActiveStatus).IsRequired();
builder.Entity<RepoManualStatus>().Property(p => p.WatchForStatusChanges).IsRequired();
builder.Entity<AccountType>().ToTable("AccountTypeCodes");
builder.Entity<AccountType>().HasKey(p => p.ID);
builder.Entity<AccountType>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AccountType>().Property(p => p.Description).IsRequired();
builder.Entity<AccountType>().Property(p => p.IsVisible).IsRequired();
builder.Entity<AccountType>().Property(p => p.CategoryId);
builder.Entity<AllowedStatusChange>().ToTable("AllowedStatusChanges");
builder.Entity<AllowedStatusChange>().HasKey(p => p.ID);
builder.Entity<AllowedStatusChange>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AllowedStatusChange>().Property(p => p.CurrentStatus).IsRequired();
builder.Entity<AllowedStatusChange>().Property(p => p.AllowedChangeStatus).IsRequired();
builder.Entity<BodyStyle>().ToTable("BodyStyleCodes");
builder.Entity<BodyStyle>().HasKey(p => p.Code);
builder.Entity<BodyStyle>().Property(p => p.Code).IsRequired();
builder.Entity<BodyStyle>().Property(p => p.Description).IsRequired();
builder.Entity<CleaningLevel>().ToTable("CleaningLevelCodes");
builder.Entity<CleaningLevel>().HasKey(p => p.Code);
builder.Entity<CleaningLevel>().Property(p => p.Code).IsRequired();
builder.Entity<CleaningLevel>().Property(p => p.Description).IsRequired();
builder.Entity<CollateralType>().ToTable("CollateralTypes");
builder.Entity<CollateralType>().HasKey(p => p.ID);
builder.Entity<CollateralType>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<CollateralType>().Property(p => p.Description).IsRequired();
builder.Entity<CollateralType>().Property(p => p.LookupHandler).IsRequired();
builder.Entity<HoldStatus>().ToTable("HoldStatusCodes");
builder.Entity<HoldStatus>().HasKey(p => p.Code);
builder.Entity<HoldStatus>().Property(p => p.Code).IsRequired();
builder.Entity<HoldStatus>().Property(p => p.Description).IsRequired();
builder.Entity<LoanCategory>().ToTable("LoanCategories");
builder.Entity<LoanCategory>().HasKey(p => p.ID);
builder.Entity<LoanCategory>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<LoanCategory>().Property(p => p.CategoryName).IsRequired();
builder.Entity<LocationType>().ToTable("LocationTypeCodes");
builder.Entity<LocationType>().HasKey(p => p.Code);
builder.Entity<LocationType>().Property(p => p.Code).IsRequired();
builder.Entity<LocationType>().Property(p => p.Description).IsRequired();
builder.Entity<VehicleType>().ToTable("VehicleTypeCodes");
builder.Entity<VehicleType>().HasKey(p => p.Code);
builder.Entity<VehicleType>().Property(p => p.Code).IsRequired();
builder.Entity<VehicleType>().Property(p => p.Description).IsRequired();
builder.Entity<CollateralTypeToVehicleType>().ToTable("CollateralTypesToVehicleTypes");
builder.Entity<CollateralTypeToVehicleType>().HasKey(p => p.ID);
builder.Entity<CollateralTypeToVehicleType>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<CollateralTypeToVehicleType>().Property(p => p.VehicleTypeId).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().ToTable("VehicleFloorPricingParameters");
builder.Entity<VehicleFloorPricingParameters>().HasKey(p => p.Id);
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.Id).IsRequired().ValueGeneratedOnAdd();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.LowCondition).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.HighCondition).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.NADAFirstValue).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.NADASecondValue).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.MMRAdjustedValue).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.PercentageOf).IsRequired();
builder.Entity<VehicleFloorPricingParameters>().Property(p => p.ValuationServiceType).IsRequired();
builder.Entity<Letter>().ToTable("Letters");
builder.Entity<Letter>().HasKey(p => p.ActionCode);
builder.Entity<Letter>().Property(p => p.Description).IsRequired();
builder.Entity<Letter>().Property(p => p.DaysToWait);
builder.Entity<Letter>().Property(p => p.WhenLetterIsSent);
builder.Entity<FloorPriceValuesUsed>().ToTable("FloorPriceValuesUsed");
builder.Entity<FloorPriceValuesUsed>().HasKey(p => new { p.AuctionAssignmentId, p.CollateralValuationId });
builder.Entity<FloorPriceValuesUsed>().Property(p => p.AuctionAssignmentId).IsRequired();
builder.Entity<FloorPriceValuesUsed>().Property(p => p.RepoId).IsRequired();
builder.Entity<FloorPriceValuesUsed>().Property(p => p.CollateralValuationId).IsRequired();
builder.Entity<FloorPriceValuesUsed>().Property(p => p.Condition);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.LowParam);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.HighParam);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.PercentageOf);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.AuctionGuideBookPrice);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasAuctionGuideBookPriceUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.MMRNationalAdjustedPrice);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.MMRRegionalAdjustedPrice);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasMMRNationalAdjustedPriceUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasMMRRegionalAdjustedPriceUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.NADALowAdjustedAuctionValue);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.NADAAverageAdjustedAuctionValue);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.NADAHighAdjustedAuctionValue);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasNADALowAdjustedAuctionValueUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasNADAAverageAdjustedAuctionValueUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.WasNADAHighAdjustedAuctionValueUsed);
builder.Entity<FloorPriceValuesUsed>().Property(p => p.NADAMMRFloorPrice);
builder.Entity<FloorPriceValuesUsed>().HasOne(p => p.CollateralValuation);
builder.Entity<CollateralValuation>().ToTable("CollateralValuations");
builder.Entity<CollateralValuation>().HasKey(p => p.Id);
builder.Entity<CollateralValuation>().Property(p => p.Id).IsRequired().ValueGeneratedOnAdd();
builder.Entity<CollateralValuation>().Property(p => p.Make).IsRequired();
builder.Entity<CollateralValuation>().Property(p => p.Model).IsRequired();
builder.Entity<CollateralValuation>().Property(p => p.Uid).IsRequired();
builder.Entity<CollateralValuation>().Property(p => p.UcgVehicleId).IsRequired();
builder.Entity<CollateralValuation>().Property(p => p.LookupDate);
builder.Entity<CollateralValuation>().Property(p => p.Mileage_Hours);
builder.Entity<CollateralValuation>().Property(p => p.MakeCode);
builder.Entity<CollateralValuation>().Property(p => p.MakeDescription);
builder.Entity<CollateralValuation>().Property(p => p.SeriesCode);
builder.Entity<CollateralValuation>().Property(p => p.SeriesDescription);
builder.Entity<CollateralValuation>().Property(p => p.BodyCode);
builder.Entity<CollateralValuation>().Property(p => p.BodyDescription);
builder.Entity<CollateralValuation>().Property(p => p.Weight);
builder.Entity<CollateralValuation>().Property(p => p.Msrp);
builder.Entity<CollateralValuation>().Property(p => p.AveMileage);
builder.Entity<CollateralValuation>().Property(p => p.MileageAdjustment);
builder.Entity<CollateralValuation>().Property(p => p.AuctionInfoUnavailable);
builder.Entity<CollateralValuation>().Property(p => p.LowAdjustedAuctionValue);
builder.Entity<CollateralValuation>().Property(p => p.AverageAdjustedAuctionValue);
builder.Entity<CollateralValuation>().Property(p => p.HighAdjustedAuctionValue);
builder.Entity<CollateralValuation>().Property(p => p.DateRange);
builder.Entity<CollateralValuation>().Property(p => p.Loan);
builder.Entity<CollateralValuation>().Property(p => p.LoanPlusVinAcc);
builder.Entity<CollateralValuation>().Property(p => p.LoanPlusVinAccMileage);
builder.Entity<CollateralValuation>().Property(p => p.Retail);
builder.Entity<CollateralValuation>().Property(p => p.RetailPlusVinAcc);
builder.Entity<CollateralValuation>().Property(p => p.RetailPlusVinAccMileage);
builder.Entity<CollateralValuation>().Property(p => p.AvgTradeIn);
builder.Entity<CollateralValuation>().Property(p => p.AvgTradeInPlusVinAcc);
builder.Entity<CollateralValuation>().Property(p => p.AvgTradeInPlusVinAccMileage);
builder.Entity<CollateralValuation>().Property(p => p.RoughTradeIn);
builder.Entity<CollateralValuation>().Property(p => p.RoughTradeInPlusVinAcc);
builder.Entity<CollateralValuation>().Property(p => p.RoughTradeInPlusVinAccMileage);
builder.Entity<CollateralValuation>().Property(p => p.TradeIn);
builder.Entity<CollateralValuation>().Property(p => p.TradeInPlusVinAcc);
builder.Entity<CollateralValuation>().Property(p => p.TradeInPlusVinAccMileage);
// Only added code-referenced fields for below entities
builder.Entity<AuctionHouse>().ToTable("Auctions");
builder.Entity<AuctionHouse>().HasKey(p => p.AuctionID);
builder.Entity<AuctionHouse>().Property(p => p.AuctionID).IsRequired();
builder.Entity<AuctionHouse>().Property(p => p.Name);
builder.Entity<AuctionHouse>().Property(p => p.Active);
builder.Entity<AuctionHouse>().Property(p => p.Address_Line_1);
builder.Entity<AuctionHouse>().Property(p => p.Address_Line_2);
builder.Entity<AuctionHouse>().Property(p => p.City);
builder.Entity<AuctionHouse>().Property(p => p.Country);
builder.Entity<AuctionHouse>().Property(p => p.Fax);
builder.Entity<AuctionHouse>().Property(p => p.Latitude);
builder.Entity<AuctionHouse>().Property(p => p.Longitude);
builder.Entity<AuctionHouse>().Property(p => p.Phone);
builder.Entity<AuctionHouse>().Property(p => p.State);
builder.Entity<AuctionHouse>().Property(p => p.ZIP);
builder.Entity<AuctionAssignment>().ToTable("AuctionAssignments");
builder.Entity<AuctionAssignment>().HasKey(p => p.ID);
builder.Entity<AuctionAssignment>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AuctionAssignment>().Property(p => p.AuctionId).IsRequired();
builder.Entity<AuctionAssignment>().Property(p => p.AuctionCustomerNo).IsRequired();
builder.Entity<AuctionAssignment>().Property(p => p.CollateralVIN);
builder.Entity<AuctionAssignment>().Property(p => p.DateSubmitted);
builder.Entity<AuctionAssignment>().Property(p => p.FloorPrice);
builder.Entity<AuctionAssignment>().Property(p => p.FloorPriceResponseCode);
builder.Entity<AuctionAssignment>().Property(p => p.FloorPriceResponseDescription);
builder.Entity<AuctionAssignment>().Property(p => p.FloorPriceSubmissionErrors);
builder.Entity<AuctionAssignment>().Property(p => p.HoldStatus);
builder.Entity<AuctionAssignment>().Property(p => p.HoldUntil);
builder.Entity<AuctionAssignment>().Property(p => p.RedeemedDate);
builder.Entity<AuctionAssignment>().Property(p => p.VehicleType);
builder.Entity<AuctionAssignment>().Property(p => p.BodyStyle);
builder.Entity<AuctionAssignment>().Property(p => p.Inoperable);
builder.Entity<AuctionAssignment>().Property(p => p.RetailValue);
builder.Entity<AuctionAssignment>().Property(p => p.AuctionNotes);
builder.Entity<AuctionAssignment>().Property(p => p.AvailablePickupDate);
builder.Entity<AuctionAssignment>().Property(p => p.LegalSaleDate);
builder.Entity<AuctionAssignment>().Property(p => p.CleaningLevel);
builder.Entity<AuctionAssignment>().Property(p => p.SubmissionErrors);
builder.Entity<AuctionAssignment>().Property(p => p.SubmissionResponseCode);
builder.Entity<AuctionAssignment>().Property(p => p.SubmissionResponseDescription);
builder.Entity<AuctionAssignment>().Property(p => p.SentTitleDocsDate);
builder.Entity<AuctionAssignment>().Property(p => p.TitleSentResponseCode);
builder.Entity<AuctionAssignment>().Property(p => p.TitleSentResponseDescription);
builder.Entity<AuctionAssignment>().Property(p => p.TitleSentSubmissionErrors);
builder.Entity<AuctionAssignment>().Property(p => p.AddedThroughRepoDatabase);
builder.Entity<AuctionAssignment>().Property(p => p.IsActive).HasDefaultValue(true);
builder.Entity<AuctionAssignment>().HasOne(p => p.AutoIMS);
builder.Entity<AuctionAssignment>().HasOne(p => p.Auction);
builder.Entity<AuctionAssignment>().HasMany(p => p.AuctionAssignmentToCollaterals);
builder.Entity<AuctionAssignment>().HasOne(p => p.FloorPriceValuesUsed);
builder.Entity<AuctionAssignmentNote>().ToTable("AuctionAssignmentNotes");
builder.Entity<AuctionAssignmentNote>().HasKey(p => p.Id);
builder.Entity<AuctionAssignmentNote>().Property(p => p.Id).IsRequired().ValueGeneratedOnAdd();
builder.Entity<AuctionAssignmentNote>().Property(p => p.AuctionAssignmentId).IsRequired();
builder.Entity<AuctionAssignmentNote>().Property(p => p.AuctionCustomerNo).IsRequired();
builder.Entity<AuctionAssignmentNote>().Property(p => p.DateWritten);
builder.Entity<AuctionAssignmentNote>().Property(p => p.Origin);
builder.Entity<AuctionAssignmentNote>().Property(p => p.Text);
builder.Entity<AuctionAssignmentNote>().Property(p => p.Type);
builder.Entity<ImsAutoFileData>().ToTable("ImsAutoFileData");
builder.Entity<ImsAutoFileData>().HasKey(p => new {p.VIN, p.RepoId});
builder.Entity<ImsAutoFileData>().Property(p => p.RepoId).IsRequired();
builder.Entity<ImsAutoFileData>().Property(p => p.AuctionCustomerNo).IsRequired();
builder.Entity<ImsAutoFileData>().Property(p => p.VIN).IsRequired();
builder.Entity<ImsAutoFileData>().Property(p => p.AssignmentAccepted);
builder.Entity<ImsAutoFileData>().Property(p => p.AuctionAssignmentId);
builder.Entity<ImsAutoFileData>().Property(p => p.DateReceivedFromAutoIMS);
builder.Entity<ImsAutoFileData>().Property(p => p.AnnouncedConditions);
builder.Entity<ImsAutoFileData>().Property(p => p.ApprovedVehicleGrade);
builder.Entity<ImsAutoFileData>().Property(p => p.ArbitrationReason);
builder.Entity<ImsAutoFileData>().Property(p => p.AsIs100KMiles);
builder.Entity<ImsAutoFileData>().Property(p => p.AuctionAge);
builder.Entity<ImsAutoFileData>().Property(p => p.AuctionGuideBookPrice);
builder.Entity<ImsAutoFileData>().Property(p => p.BuyerId);
builder.Entity<ImsAutoFileData>().Property(p => p.BuyerName);
builder.Entity<ImsAutoFileData>().Property(p => p.ChargeAmount);
builder.Entity<ImsAutoFileData>().Property(p => p.CheckAmount);
builder.Entity<ImsAutoFileData>().Property(p => p.ClientAge);
builder.Entity<ImsAutoFileData>().Property(p => p.ClientCancelled);
builder.Entity<ImsAutoFileData>().Property(p => p.CollateralImagePath);
builder.Entity<ImsAutoFileData>().Property(p => p.CollisionDamage);
builder.Entity<ImsAutoFileData>().Property(p => p.ConditionReportLink);
builder.Entity<ImsAutoFileData>().Property(p => p.DateEnteredAutoIMS);
builder.Entity<ImsAutoFileData>().Property(p => p.DatePickedUp);
builder.Entity<ImsAutoFileData>().Property(p => p.DateofLoss);
builder.Entity<ImsAutoFileData>().Property(p => p.DaysRun);
builder.Entity<ImsAutoFileData>().Property(p => p.DaysRunHighestBidRecordedbyAuction);
builder.Entity<ImsAutoFileData>().Property(p => p.DaystoDelivery);
builder.Entity<ImsAutoFileData>().Property(p => p.Description);
builder.Entity<ImsAutoFileData>().Property(p => p.FloorPriceAccepted);
builder.Entity<ImsAutoFileData>().Property(p => p.FundsSent);
builder.Entity<ImsAutoFileData>().Property(p => p.GrossPercentFloor);
builder.Entity<ImsAutoFileData>().Property(p => p.HighestBid);
builder.Entity<ImsAutoFileData>().Property(p => p.InspectedDate);
builder.Entity<ImsAutoFileData>().Property(p => p.IsDrivable);
builder.Entity<ImsAutoFileData>().Property(p => p.IsOperable);
builder.Entity<ImsAutoFileData>().Property(p => p.MMR);
builder.Entity<ImsAutoFileData>().Property(p => p.MMRNationalAdjustedPrice);
builder.Entity<ImsAutoFileData>().Property(p => p.MMRRegionalAdjustedPrice);
builder.Entity<ImsAutoFileData>().Property(p => p.NetPercentFloor);
builder.Entity<ImsAutoFileData>().Property(p => p.OTHERAdvancedOther);
builder.Entity<ImsAutoFileData>().Property(p => p.OTHERAdvancedStorage);
builder.Entity<ImsAutoFileData>().Property(p => p.OTHERAdvancedTow);
builder.Entity<ImsAutoFileData>().Property(p => p.OTHERMiscellaneous);
builder.Entity<ImsAutoFileData>().Property(p => p.OTHERTotal);
builder.Entity<ImsAutoFileData>().Property(p => p.OtherAdvanceFees);
builder.Entity<ImsAutoFileData>().Property(p => p.ScheduledSaleDate);
builder.Entity<ImsAutoFileData>().Property(p => p.SoldDate);
builder.Entity<ImsAutoFileData>().Property(p => p.Status);
builder.Entity<ImsAutoFileData>().Property(p => p.SalePrice);
builder.Entity<ImsAutoFileData>().Property(p => p.ShipmentDate);
builder.Entity<ImsAutoFileData>().Property(p => p.StorageCost);
builder.Entity<ImsAutoFileData>().Property(p => p.StorageRatePerDay);
builder.Entity<ImsAutoFileData>().Property(p => p.StatedMileage);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleNumber);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleReceived);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleReturned);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleState);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleStatus);
builder.Entity<ImsAutoFileData>().Property(p => p.TitleStatusfromAuction);
builder.Entity<ImsAutoFileData>().Property(p => p.TotalCharges);
builder.Entity<ImsAutoFileData>().Property(p => p.TowCost);
builder.Entity<ImsAutoFileData>().Property(p => p.VehicleDecimalGradeCode);
builder.Entity<ImsAutoFileData>().Property(p => p.VehicleGrade);
builder.Entity<RepoCompany>().ToTable("RepoCompany");
builder.Entity<RepoCompany>().HasKey(p => p.ID);
builder.Entity<RepoCompany>().Property(p => p.ID).IsRequired().ValueGeneratedOnAdd();
builder.Entity<RepoCompany>().Property(p => p.Name);
builder.Entity<RepoCompany>().Property(p => p.Email);
builder.Entity<RefundStatus>().ToTable("RefundStatuses");
builder.Entity<RefundStatus>().HasKey(p => p.RepoId);
builder.Entity<AuctionAssignmentToCollateral>().ToTable("AuctionAssignmentsToCollaterals");
builder.Entity<AuctionAssignmentToCollateral>().HasKey(p => new { p.AuctionAssignmentId, p.CollateralId });
builder.Entity<AuctionAssignmentToCollateral>()
.HasOne(aa2c => aa2c.AuctionAssignment)
.WithMany(auctionAssignment => auctionAssignment.AuctionAssignmentToCollaterals)
.HasForeignKey(aa2c => aa2c.AuctionAssignmentId);
builder.Entity<AuctionAssignmentToCollateral>()
.HasOne(aa2c => aa2c.Collateral)
.WithMany(Collateral => Collateral.AuctionAssignmentToCollaterals)
.HasForeignKey(aa2c => aa2c.CollateralId);
builder.Entity<RepoCompanySelection>().ToTable("RepoCompanySelections");
builder.Entity<RepoCompanySelection>().HasKey(p => p.Id);
builder.Entity<RepoCompanySelection>().Property(p => p.RepoType)
.HasConversion(x => x.ToString(),
x => (RepoType) Enum.Parse(typeof(RepoType), x));
builder.Entity<ProcessingReceipt>().Property(p => p.Processed);
builder.Entity<SavedLocation>().ToTable("SavedLocations");
builder.Entity<SavedLocation>().HasKey(p => p.ID);
builder.Entity<ExternalUser>().ToTable("UserCache");
builder.Entity<ExternalUser>().HasKey(p => p.Id);
builder.Entity<ExternalUser>().Property(p => p.Name);
builder.Entity<ExternalUser>().Property(p => p.Code);
builder.Entity<SixtyPlusCollector>().ToTable("SixtyPlusCollector");
builder.Entity<SixtyPlusCollector>().HasKey(p => p.SixtyPlusCollectorId);
}
}
}
@@ -0,0 +1,12 @@
namespace LCU.Shared.Collections.RepoApiLib.Persistence
{
public abstract class BaseRepository
{
protected readonly AppDbContext _context;
public BaseRepository(AppDbContext context)
{
_context = context;
}
}
}
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class AuctionAssignmentNoteRepository : BaseRepository, IAuctionAssignmentNoteRepository
{
public AuctionAssignmentNoteRepository(AppDbContext context) : base(context) { }
public async Task<PagedResult<AuctionAssignmentNote>> ListAllAsync(int filterPage, int filterLimit)
{
var results = new PagedResult<AuctionAssignmentNote>();
var skip = (filterPage - 1) * filterLimit;
var temp = Queryable.OrderByDescending(from x in _context.AuctionAssignmentNotes
select x, x => x.Id);
results.Total = temp.Count();
results.Items = await temp.Skip(skip).Take(filterLimit).ToListAsync();
return results;
}
public async Task<AuctionAssignmentNote> FindByIdAsync(int id)
{
return await Queryable.Where(_context.AuctionAssignmentNotes, c => c.Id == id).FirstOrDefaultAsync();
}
public async Task<IEnumerable<AuctionAssignmentNote>> FindConflictingNotes(DateTime written, string text, string writer)
{
return await Queryable.Where(_context.AuctionAssignmentNotes, c => c.DateWritten == written && c.Text == text && c.Writer == writer).ToListAsync();
}
public async Task<AuctionAssignmentNote> AddAsync(AuctionAssignmentNote auctionAssignmentNote)
{
var result = await _context.AuctionAssignmentNotes.AddAsync(auctionAssignmentNote);
return result.Entity;
}
public void Update(AuctionAssignmentNote auctionAssignmentNote)
{
_context.AuctionAssignmentNotes.Update(auctionAssignmentNote);
}
public void Remove(AuctionAssignmentNote auctionAssignmentNote)
{
_context.AuctionAssignmentNotes.Remove(auctionAssignmentNote);
}
}
}
@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Extensions;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class AuctionAssignmentRepository : BaseRepository, IAuctionAssignmentRepository
{
public AuctionAssignmentRepository(AppDbContext context) : base(context)
{
}
public async Task<PagedResult<AuctionAssignment>> ListAllAsync(int filterPage, int filterLimit)
{
var results = new PagedResult<AuctionAssignment>();
var skip = (filterPage - 1) * filterLimit;
var temp = (from x in _context.AuctionAssignments
select x).OrderByDescending(x => x.ID);
results.Total = temp.Count();
results.Items = await temp.Skip(skip).Take(filterLimit).IncludeAll().ToListAsync();
return results;
}
public async Task<PagedResult<AuctionAssignment>> ListReadyForFloorPriceAsync()
{
var results = new PagedResult<AuctionAssignment>();
var temp = (from x in _context.AuctionAssignments
where (x.FloorPrice ?? 0) == 0 && x.AutoIMS != null && x.AutoIMS.SoldDate == null &&
(x.AutoIMS.StatedMileage ?? -1) > 1 && x.AutoIMS.ScheduledSaleDate != null &&
x.AutoIMS.ScheduledSaleDate > DateTime.Now.Date &&
x.RedeemedDate == null &&
( (x.AutoIMS.ApprovedVehicleGrade ?? 0) > 0 || (x.AutoIMS.VehicleGrade ?? 0) > 0)
select x).OrderByDescending(x => x.ID);
results.Items = await temp.IncludeAll().ToListAsync();
results.Total = temp.Count();
return results;
}
public async Task<AuctionAssignment> FindByIdAsync(int id)
{
return await Queryable.Where(_context.AuctionAssignments, c => c.ID == id).IncludeAll().FirstOrDefaultAsync();
}
public async Task<IReadOnlyCollection<AuctionAssignment>> FindListByIdsAsync(IReadOnlyCollection<int> idSet)
{
return await Queryable.Where(_context.AuctionAssignments, c => idSet.Contains(c.ID)).ToListAsync();
}
public async Task<IReadOnlyCollection<AuctionAssignment>> FindByRepoIdAsync(int repoId)
{
return await _context.AuctionAssignments.Where(auctionAssignment => auctionAssignment.RepoId == repoId).IncludeAll().ToListAsync();
}
public async Task<AuctionAssignment> FindByByAuctionCustomerNoAndVin(string auctionCustomerNo, string vin)
{
return await Queryable
.Where(_context.AuctionAssignments, auctionAssignment =>
auctionAssignment.AuctionCustomerNo == auctionCustomerNo &&
auctionAssignment.CollateralVIN == vin &&
auctionAssignment.IsActive == true).IncludeAll().FirstOrDefaultAsync();
}
public async Task<AuctionAssignment> AddAsync(AuctionAssignment auctionAssignment)
{
var result = await _context.AuctionAssignments.AddAsync(auctionAssignment);
result.Entity.Auction = Queryable.Where(_context.Auctions, a => a.AuctionID == result.Entity.AuctionId)
.FirstOrDefault();
return result.Entity;
}
public void Update(AuctionAssignment auctionAssignment)
{
_context.AuctionAssignments.Update(auctionAssignment);
}
public void Remove(AuctionAssignment auctionAssignment)
{
_context.AuctionAssignments.Remove(auctionAssignment);
}
}
}
@@ -0,0 +1,43 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class AuctionHouseRepository : BaseRepository, IAuctionHouseRepository
{
public AuctionHouseRepository(AppDbContext context) : base(context)
{
}
public async Task<IEnumerable<AuctionHouse>> ListAllAsync()
{
return await _context.Auctions.ToListAsync();
}
public async Task AddAsync(AuctionHouse auction)
{
await _context.Auctions.AddAsync(auction);
}
public async Task<AuctionHouse> FindByIdAsync(string id)
{
return await Queryable.Where<AuctionHouse>(_context.Auctions, c => c.AuctionID == id).FirstOrDefaultAsync();
}
public void Update(AuctionHouse auction)
{
_context.Auctions.Update(auction);
}
public void Remove(AuctionHouse auction)
{
_context.Auctions.Remove(auction);
}
}
}
@@ -0,0 +1,51 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class AuditRecordRepository : BaseRepository, IAuditRecordRepository
{
public AuditRecordRepository(AppDbContext context) : base(context)
{
}
public async Task<PagedResult<AuditRecord>> ListAllAsync(int filterPage, int filterLimit)
{
var results = new PagedResult<AuditRecord>();
var skip = (filterPage - 1) * filterLimit;
var temp = Queryable.OrderByDescending<AuditRecord, int>((from x in _context.AuditRecords
where x.DatePerformed > DateTime.Today.AddDays(-120)
select x), x => x.ID);
results.Total = temp.Count();
results.Items = await temp.Skip(skip).Take(filterLimit).ToListAsync();
return results;
}
public async Task AddAsync(AuditRecord auditRecord)
{
await _context.AuditRecords.AddAsync(auditRecord);
}
public async Task<AuditRecord> FindByIdAsync(int id)
{
return await _context.AuditRecords.FindAsync(id);
}
public void Update(AuditRecord auditRecord)
{
_context.AuditRecords.Update(auditRecord);
}
public void Remove(AuditRecord auditRecord)
{
_context.AuditRecords.Remove(auditRecord);
}
}
}
@@ -0,0 +1,44 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using LCU.Shared.Collections.RepoApiLib.Extensions;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class CollateralRepository : BaseRepository, ICollateralRepository
{
public CollateralRepository(AppDbContext context) : base(context)
{
}
public async Task<IEnumerable<Collateral>> ListAllAsync()
{
return await _context.Collaterals.IncludeAll().ToListAsync();
}
public async Task<Collateral> AddAsync(Collateral collateral)
{
var result = await _context.Collaterals.AddAsync(collateral);
return result.Entity;
}
public async Task<Collateral> FindByIdAsync(int id)
{
return await Queryable.Where<Collateral>(_context.Collaterals, c => c.CollateralId == id).IncludeAll().FirstOrDefaultAsync();
}
public void Update(Collateral collateral)
{
_context.Collaterals.Update(collateral);
}
public void Remove(Collateral collateral)
{
_context.Collaterals.Remove(collateral);
}
}
}
@@ -0,0 +1,266 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Exceptions;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
using Serilog;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class EventAlertRepository : BaseRepository, IEventAlertRepository
{
private const string RepoStatus = "REPO";
private const string O4RStatus = "O4R";
private const int ClosedAccountCutoffDays = 90;
private static List<string> _nonRepeatingAlerts = new List<string>
{
"Credit Adjustment Received",
"Debit Adjustment Received",
"Notice of Plan to Sell Not Found",
"Notice of Repossession Not Found",
"RTC Letter Not Found"
};
public EventAlertRepository(AppDbContext context) : base(context)
{
}
public async Task<IEnumerable<EventAlert>> ListAllAsync()
{
return await _context.EventAlerts.ToListAsync();
}
public async Task<IEnumerable<EventAlert>> ListUnreadAsync()
{
var result = from alert in _context.EventAlerts
join repo in _context.RepoAccounts
on alert.AccountNo equals repo.AccountNo
join activeStatus in _context.RepoManualStatuses
on repo.Status equals activeStatus.Description
where activeStatus.WatchForStatusChanges && alert.DateMarkedRead == null
select alert;
return await result.Distinct().ToListAsync();
}
public async Task<IEnumerable<EventAlert>> ListWithinDateRangeAsync(DateTime start, DateTime end)
{
return await _context.EventAlerts.Where(e => e.DateAdded >= start && e.DateAdded <= end).ToListAsync();
}
public async Task<IEnumerable<EventAlert>> ListRepoNoAuctionAsync()
{
var closedDateCutoff = DateTime.Today.Subtract(TimeSpan.FromDays(ClosedAccountCutoffDays));
var accountsInRepo = (
from repo in _context.RepoAccounts
where repo.Status.Equals(RepoStatus) && (repo.DateClosed == null || repo.DateClosed > closedDateCutoff)
select repo);
var accountsInRepoWithAuction = (
from repo in accountsInRepo
join auctionAssignment in _context.AuctionAssignments
on repo.RepoId equals auctionAssignment.RepoId
where auctionAssignment.IsActive == true
select repo);
var accountsNoAuction = await accountsInRepo.Except(accountsInRepoWithAuction).ToListAsync();
return accountsNoAuction.Select(repo => new EventAlert()
{
AccountNo = repo.AccountNo,
RepoId = repo.RepoId,
Message = "Repo No Auction"
}).Distinct();
}
public async Task<IEnumerable<EventAlert>> ListRepoNoCompanyAsync()
{
return await ListStatusNoCompanyAsync(RepoStatus);
}
public async Task<IEnumerable<EventAlert>> ListO4rNoCompanyAsync()
{
return await ListStatusNoCompanyAsync(O4RStatus);
}
public async Task<IEnumerable<EventAlert>> ListStatusNoCompanyAsync(string status)
{
var closedDateCutoff = DateTime.Today.Subtract(TimeSpan.FromDays(ClosedAccountCutoffDays));
var result = from repo in _context.RepoAccounts
from collateral in _context.Collaterals.Where(c => c.RepoId == repo.RepoId)
from repoCompanySelection in _context.RepoCompanySelections.Where(x => x.CollateralId == collateral.CollateralId).DefaultIfEmpty()
where (repoCompanySelection == null || repoCompanySelection.RepoCompanyId == null) && repo.Status.Equals(status) && (repo.DateClosed == null || repo.DateClosed > closedDateCutoff)
select new EventAlert
{
AccountNo = repo.AccountNo,
RepoId = repo.RepoId,
Message = status + " No Repo Company"
};
var temp = await result.Distinct().ToListAsync();
return temp;
}
public async Task<IEnumerable<EventAlert>> ListReadyForRetitleAsync()
{
var result = from collateral in _context.Collaterals
join repo in _context.RepoAccounts
on collateral.RepoId equals repo.RepoId
join auctionAssignmentToCollateral in _context.AuctionAssignmentToCollaterals
on collateral.CollateralId equals auctionAssignmentToCollateral.CollateralId
join auctionAssignment in _context.AuctionAssignments
on auctionAssignmentToCollateral.AuctionAssignmentId equals auctionAssignment.ID
from data in Queryable.Where<ImsAutoFileData>(_context.ImsAutoFileData, ims => auctionAssignment.ID == ims.AuctionAssignmentId ||
(repo.RepoId == ims.RepoId && auctionAssignment.CollateralVIN == ims.VIN))
where collateral.RetitledInLandmarkName == null && repo.Status.Equals(RepoStatus) && auctionAssignment.IsActive && repo.RedemptionExpiredDate < DateTime.Today
select new EventAlert
{
AccountNo = repo.AccountNo,
RepoId = repo.RepoId,
Message = "Ready For Retitle"
};
return await result.Distinct().ToListAsync();
}
public async Task<IEnumerable<EventAlert>> ListFloorUpdateFailedAsync()
{
var result = from autoFileData in _context.ImsAutoFileData
join repo in _context.RepoAccounts
on autoFileData.RepoId equals repo.RepoId
join collateral in _context.Collaterals
on repo.RepoId equals collateral.RepoId
join auctionAssignmentToCollateral in _context.AuctionAssignmentToCollaterals
on collateral.CollateralId equals auctionAssignmentToCollateral.CollateralId
join auctionAssignment in _context.AuctionAssignments
on auctionAssignmentToCollateral.AuctionAssignmentId equals auctionAssignment.ID
where ((auctionAssignment.HoldStatus ?? 0) == 0 || (auctionAssignment.HoldUntil ?? DateTime.Now) <= DateTime.Now) &&
auctionAssignment.RedeemedDate == null &&
autoFileData.SoldDate == null &&
(auctionAssignment.FloorPriceResponseCode != null && auctionAssignment.FloorPriceResponseCode != 1)
select new EventAlert
{
AccountNo = repo.AccountNo,
RepoId = repo.RepoId,
Message = "Floor Update Failed"
};
return await result.Distinct().ToListAsync();
}
public async Task<IEnumerable<EventAlert>> ListFloorNeedsSettingAsync()
{
var result = from data in _context.ImsAutoFileData
join repo in _context.RepoAccounts
on data.RepoId equals repo.RepoId
join collateral in _context.Collaterals
on repo.RepoId equals collateral.RepoId
join auctionAssignmentToCollateral in _context.AuctionAssignmentToCollaterals
on collateral.CollateralId equals auctionAssignmentToCollateral.CollateralId
join auctionAssignment in _context.AuctionAssignments
on auctionAssignmentToCollateral.AuctionAssignmentId equals auctionAssignment.ID
where (auctionAssignment.FloorPrice ?? 0) == 0 &&
((auctionAssignment.HoldStatus ?? 0) == 0 || (auctionAssignment.HoldUntil ?? DateTime.Now) <= DateTime.Now) &&
auctionAssignment.RedeemedDate == null &&
data.SoldDate == null &&
data.ScheduledSaleDate != null &&
data.ScheduledSaleDate < DateTime.Now.AddDays(3) &&
repo.DateClosed == null
select new EventAlert
{
AccountNo = repo.AccountNo,
RepoId = repo.RepoId,
Message = "Floor Set Required"
};
return await result.Distinct().ToListAsync();
}
public async Task AddAsync(EventAlert eventAlert)
{
if (eventAlert.SubMessage != null && eventAlert.SubMessage.Length > 499)
{
eventAlert.SubMessage = eventAlert.SubMessage.Substring(0, 499);
}
if (!IsDuplicateAlert(eventAlert))
{
await _context.EventAlerts.AddAsync(eventAlert);
}
else
{
throw new DuplicateResourceException("EventAlert");
}
}
public async Task<IEnumerable<EventAlert>> AddRangeAsync(IEnumerable<EventAlert> eventAlerts)
{
List<EventAlert> filteredEventAlerts = new List<EventAlert>();
foreach (EventAlert eventAlert in eventAlerts)
{
if (eventAlert.SubMessage != null && eventAlert.SubMessage.Length > 499)
{
eventAlert.SubMessage = eventAlert.SubMessage.Substring(0, 499);
}
if (!IsDuplicateAlert(eventAlert))
{
filteredEventAlerts.Add(eventAlert);
}
else
{
Log.Debug($"EventAlertRepository: Valid Alert Already Exists eventAlert: {@eventAlert}." +
$" Will Continue without adding this to Event Alerts Context.", eventAlerts, eventAlert
);
}
}
await _context.EventAlerts.AddRangeAsync(filteredEventAlerts);
return filteredEventAlerts;
}
public bool IsDuplicateAlert(EventAlert eventAlert)
{
var duplicateAlerts = (
from alert in _context.EventAlerts
where alert.AccountNo == eventAlert.AccountNo &&
alert.Message == eventAlert.Message &&
(
alert.DateMarkedRead == null ||
alert.DateMarkedRead > DateTime.Now.AddHours(-24) ||
_nonRepeatingAlerts.Contains(alert.Message)
)
select alert
).ToList();
return (duplicateAlerts.Any());
}
public async Task<EventAlert> FindByIdAsync(int id)
{
return await _context.EventAlerts.FindAsync(id);
}
public void Update(EventAlert category)
{
_context.EventAlerts.Update(category);
}
public void Remove(EventAlert category)
{
_context.EventAlerts.Remove(category);
}
public async Task<IEnumerable<EventAlert>> ListUnreadByAccountNoAsync(string accountNo)
{
var results = _context.EventAlerts.Where(x => x.AccountNo == accountNo && x.DateMarkedRead == null);
return await results.ToListAsync();
}
}
}
@@ -0,0 +1,43 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Persistence;
using Microsoft.EntityFrameworkCore;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public class ExternalUserRepository : BaseRepository, IExternalUserRepository
{
public ExternalUserRepository(AppDbContext context) : base(context) { }
public async Task<IReadOnlyCollection<ExternalUser>> ListAsync()
{
return await _context.ExternalUsers.AsNoTracking().ToListAsync();
}
public async Task<ExternalUser> FindByReferenceIdAsync(int referenceId)
{
return await _context.ExternalUsers.AsNoTracking().Where(user => user.ReferenceId == referenceId).FirstOrDefaultAsync();
}
public async Task SynchronizeSet(IReadOnlyCollection<ExternalUser> externalUsers)
{
foreach (var user in externalUsers)
{
var existing = await FindByReferenceIdAsync(user.ReferenceId);
if ( existing != null)
{
user.Id = existing.Id;
_context.Entry(user).State = EntityState.Modified;
_context.ExternalUsers.Update(user);
}
else
{
await _context.ExternalUsers.AddAsync(user);
}
}
}
}
}
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IAuctionAssignmentNoteRepository
{
Task<PagedResult<AuctionAssignmentNote>> ListAllAsync(int filterPage, int filterLimit);
Task<AuctionAssignmentNote> FindByIdAsync(int id);
Task<IEnumerable<AuctionAssignmentNote>> FindConflictingNotes(DateTime written, string text, string writer);
Task<AuctionAssignmentNote> AddAsync(AuctionAssignmentNote auctionAssignmentNote);
void Update(AuctionAssignmentNote auctionAssignmentNote);
void Remove(AuctionAssignmentNote auctionAssignmentNote);
}
}
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IAuctionAssignmentRepository
{
Task<PagedResult<AuctionAssignment>> ListAllAsync(int filterPage, int filterLimit);
Task<PagedResult<AuctionAssignment>> ListReadyForFloorPriceAsync();
Task<AuctionAssignment> FindByIdAsync(int id);
Task<IReadOnlyCollection<AuctionAssignment>> FindByRepoIdAsync(int repoId);
Task<AuctionAssignment> FindByByAuctionCustomerNoAndVin(string auctionCustomerNo, string vin);
Task<AuctionAssignment> AddAsync(AuctionAssignment auctionAssignment);
void Update(AuctionAssignment auctionAssignment);
void Remove(AuctionAssignment auctionAssignment);
Task<IReadOnlyCollection<AuctionAssignment>> FindListByIdsAsync(IReadOnlyCollection<int> idSet);
}
}
@@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IAuctionHouseRepository
{
Task<IEnumerable<AuctionHouse>> ListAllAsync();
Task AddAsync(AuctionHouse assignment);
Task<AuctionHouse> FindByIdAsync(string id);
void Update(AuctionHouse assignment);
void Remove(AuctionHouse assignment);
}
}
@@ -0,0 +1,15 @@
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Models.Results;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IAuditRecordRepository
{
Task<PagedResult<AuditRecord>> ListAllAsync(int filterPage, int filterLimit);
Task AddAsync(AuditRecord auditRecord);
Task<AuditRecord> FindByIdAsync(int id);
void Update(AuditRecord auditRecord);
void Remove(AuditRecord auditRecord);
}
}
@@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface ICollateralRepository
{
Task<IEnumerable<Collateral>> ListAllAsync();
Task<Collateral> AddAsync(Collateral collateral);
Task<Collateral> FindByIdAsync(int id);
void Update(Collateral collateral);
void Remove(Collateral collateral);
}
}
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IEventAlertRepository
{
Task<IEnumerable<EventAlert>> ListAllAsync();
Task<IEnumerable<EventAlert>> ListUnreadAsync();
Task<IEnumerable<EventAlert>> ListWithinDateRangeAsync(DateTime start, DateTime end);
Task<IEnumerable<EventAlert>> ListRepoNoAuctionAsync();
Task<IEnumerable<EventAlert>> ListRepoNoCompanyAsync();
Task<IEnumerable<EventAlert>> ListO4rNoCompanyAsync();
Task<IEnumerable<EventAlert>> ListReadyForRetitleAsync();
Task<IEnumerable<EventAlert>> ListFloorUpdateFailedAsync();
Task<IEnumerable<EventAlert>> ListFloorNeedsSettingAsync();
Task<IEnumerable<EventAlert>> ListUnreadByAccountNoAsync(string accountNo);
Task AddAsync(EventAlert eventAlert);
Task<IEnumerable<EventAlert>> AddRangeAsync(IEnumerable<EventAlert> eventAlerts);
Task<EventAlert> FindByIdAsync(int id);
void Update(EventAlert eventAlert);
void Remove(EventAlert eventAlert);
}
}
@@ -0,0 +1,13 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Shared.Collections.RepoApiLib.Models;
namespace LCU.Shared.Collections.RepoApiLib.Repositories
{
public interface IExternalUserRepository
{
Task<IReadOnlyCollection<ExternalUser>> ListAsync();
Task<ExternalUser> FindByReferenceIdAsync(int referenceId);
Task SynchronizeSet(IReadOnlyCollection<ExternalUser> externalUsers);
}
}

Some files were not shown because too many files have changed in this diff Show More