2016-07-29 18 views
-3

Ich mache ein Programm für eine Versicherungsgesellschaft, die aus datePickers besteht. Der Benutzer kann ein Datum zum Starten der Richtlinie auswählen und dann ein Datum auswählen, an dem er einen Anspruch geltend gemacht hat. Für jeden Anspruch innerhalb von 1 Jahr nach Beginn der Versicherungspolice die Prämie um 20% erhöhen. Aber egal, wie ich es versuche, die Prämie steigt immer noch um 20%, auch wenn der Benutzer einen Anspruch geltend gemacht hat, der vor mehr als einem Jahr war. Meine Police beginnt bei 500 £, wenn ich mein Startdatum als 26/07/2017 festlege und dann mein Reklamationsdatum auf den 05/07/2016 setze, was mehr als ein Jahr nach Beginn des Policy Date ist hat der Richtlinie 20% hinzugefügt. Es sollte bei £ 500Überprüfen, ob zwei Daten im selben Jahr sind

Mein Code geblieben ist als

XAML

<DatePicker HorizontalAlignment="Center" Name="dpkStartDateOfPolicy" Grid.Column="1" VerticalAlignment="Top" Grid.Row="1" /> 
     <DatePicker Name="dpkClaim1" Grid.Row="15" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top"/> 

xaml.cs

int policy = 500; 
     double Chauffeur = 0.10; 
     double Accountant = 0.10; 
     double age2125 = 0.20; 
     double age2675 = 0.10; 
     double claimOneYear = 0.20; 
     double tempPolicy; 

     // Calculation for Claim in the last year 
     public void claimOneYearMethod() 
      { 

      tempPolicy = (tempPolicy + tempPolicy * claimOneYear); 
      txtPolicy.Text = tempPolicy.ToString(); 


     } 

    // Code for claim within the last year. 
      DateTime Claim1 = Convert.ToDateTime(dpkClaim1.SelectedDate); 

      DateTime StartPolicy = Convert.ToDateTime(dpkStartDateOfPolicy.SelectedDate); 
      if (StartPolicy.Age().Years() <1 && Claim1) 
      { 
       claimOneYearMethod(); 
      } 

Extention.cs

public static class Extensions 
{ 
    public static TimeSpan Age(this DateTime dt) 
    { 
     return (DateTime.Now - dt); 
    } 

    public static int Years(this TimeSpan ts) 
    { 
     return (int)((double)ts.Days/365.2425); 
    } 
} 

Brachen Ich habe versuchte auch diese

if (StartPolicy.Age().Years() <1 && Claim1.Age().Years() == 0) 
      { 
       claimOneYearMethod(); 
      } 
+2

Was genau ist die Frage? – Magnus

+0

Für jeden Anspruch innerhalb von 1 Jahr nach dem Startdatum der Police die Prämie um 20% erhöhen. Selbst als die Forderung vor mehr als einem Jahr bestand, stieg die Politik immer noch um 20%. Was mache ich hier falsch? –

+0

Sie möchten prüfen, ob zwei Termine innerhalb eines Jahres liegen? Ihre Frage muss spezifischer sein und nur relevanten Code für die eigentliche Frage enthalten. – Magnus

Antwort

2

Aus den Kommentaren Sie auf dem Laufenden habe ich versucht, einen vereinfachten Test dafür zu bekommen. Dies ist, wie es aussieht:

private void dtp_ValueChanged(object sender, EventArgs e) 
{ 
    DateTime policy = dtpPolicy.Value; 
    DateTime claim = dtpClaim.Value; 

    if (policy.Age().Years() < 1 && claim.Age().Years() == 0) 
    { 
     lblresult.Text = "Result is: true"; 
    } 
    else 
     lblresult.Text = "Result is: false"; 
} 

Dies ist die bereits verwendete Erweiterung (original):

public static class Extensions 
{ 
    public static TimeSpan Age(this DateTime dt) 
    { 
     return (DateTime.Now - dt); 
    } 

    public static int Years(this TimeSpan ts) 
    { 
     return (int)((double)ts.Days/365.2425); 
    } 
} 

Dieser arbeitet.

enter image description here

Wie dem auch sei, etwas zu sagen: Wenn bereits WPF können Sie die Kommissionierer über seinen Namen ansprechen sollten nicht aber die Werte zu Eigenschaften zuerst binden! Nach den Kommentaren unten: In der Vergangenheit

In Ihrem Beispiel Sie die Startpolitik 2 Jahre setzen, aber ich will, was ist die Politik in der Zukunft und wenn es mehr als ein Jahr her, seit ein Anspruch dann die Ergebnis sollte es £ 500

Dazu werden nur:

if((policy - claim).Years > 1) 
{ 
    //return your 500; 
} 
+0

Ich benutzte dies und es funktioniert nicht' DateTime Claim1 = Convert.ToDateTime (dpkClaim1.SelectedDate); DateTime StartPolicy = Convert.ToDateTime (dpkStartDateOfPolicy.SelectedDate); if (StartPolicy.Age(). Years() <1 && Claim1.Age(). Jahre() == 0) { claimoneYearMethod(); } ' –

+0

Dann debuggen Sie Ihr Werkzeug. Mein kleines Beispiel zeigt, dass die Erweiterung und der Vergleich zu 100% funktioniert. Sie Frage ist schlecht formatiert, was macht es unangenehm zu lesen. Ich kann keinen Fehler sehen. – C4u

+0

Auch: Was bedeutet es 'nicht funktioniert'? Wähle 2 'DateTimes' für den aktuellen Tag und es muss' true' ergeben! Wenn nicht, liegt das Problem an Ihrem Design. – C4u

0
DateTime policyStart = policy.StartDate; 
    DateTime endDate = policyStart.AddYears(1); 

      foreach (var claim in Claims) 
      { 
       if(claim.ClaimDate >= policyStart && claim.ClaimDate <= endDate) 
       { 
        //Code to modify policy rate 
       } 
      } 
+0

Wo bekommen Sie' StartDate' von –

+0

wo immer Sie sind. Stellen Sie sich vor, Sie haben diese Daten irgendwo, also stecken Sie einfach Ihr Startdatum dort ein. Gleiche mit Anspruch Daten. – Muckeypuck

+0

ich verwende nicht wpf, also bin ich nicht 100% sicher von der Syntax, aber ich denke, es wäre etwas wie DateTime startDate = dpkStartDateOfPolicy.Value; – Muckeypuck

Verwandte Themen