github.com/companieshouse/insolvency-api@v0.0.0-20231024103413-440c973d9e9b/service/progress_report_service.go (about) 1 package service 2 3 import ( 4 "fmt" 5 "net/http" 6 "strings" 7 8 "github.com/companieshouse/chs.go/log" 9 "github.com/companieshouse/insolvency-api/dao" 10 "github.com/companieshouse/insolvency-api/models" 11 "github.com/companieshouse/insolvency-api/utils" 12 ) 13 14 // ValidateProgressReportDetails checks that the incoming statement details are valid 15 func ValidateProgressReportDetails(svc dao.Service, progressReportStatementDao *models.ProgressReportResourceDao, transactionID string, req *http.Request) (string, error) { 16 var errs []string 17 18 if progressReportStatementDao == nil { 19 err := fmt.Errorf("nil DAO passed to service for validation") 20 log.ErrorR(req, err) 21 return "", err 22 } 23 24 // Check that the attachment has been submitted correctly 25 if len(progressReportStatementDao.Attachments) == 0 || len(progressReportStatementDao.Attachments) > 1 { 26 errs = append(errs, "please supply only one attachment") 27 } 28 29 // Check if statement date supplied is in the future or before company was incorporated 30 insolvencyResource, err := svc.GetInsolvencyResource(transactionID) 31 if err != nil { 32 err = fmt.Errorf("error getting insolvency resource from DB: [%s]", err) 33 log.ErrorR(req, err) 34 return "", err 35 } 36 37 // Retrieve company incorporation date 38 incorporatedOn, err := GetCompanyIncorporatedOn(insolvencyResource.Data.CompanyNumber, req) 39 if err != nil { 40 err = fmt.Errorf("error getting company details from DB: [%s]", err) 41 log.ErrorR(req, err) 42 return "", err 43 } 44 45 ok, err := utils.IsDateBetweenIncorporationAndNow(progressReportStatementDao.FromDate, incorporatedOn) 46 if err != nil { 47 err = fmt.Errorf("error parsing date: [%s]", err) 48 log.ErrorR(req, err) 49 return "", err 50 } 51 if !ok { 52 errs = append(errs, fmt.Sprintf("from_date [%s] should not be in the future or before the company was incorporated", progressReportStatementDao.FromDate)) 53 } 54 55 ok, err = utils.IsDateBetweenIncorporationAndNow(progressReportStatementDao.ToDate, incorporatedOn) 56 if err != nil { 57 err = fmt.Errorf("error parsing date: [%s]", err) 58 log.ErrorR(req, err) 59 return "", err 60 } 61 if !ok { 62 errs = append(errs, fmt.Sprintf("to_date [%s] should not be in the future or before the company was incorporated", progressReportStatementDao.ToDate)) 63 } 64 65 // Check if from date is after to date 66 ok, err = utils.IsDateBeforeDate(progressReportStatementDao.FromDate, progressReportStatementDao.ToDate) 67 if !ok { 68 errs = append(errs, fmt.Sprintf("to_date [%s] should not be before from_date [%s]", progressReportStatementDao.ToDate, progressReportStatementDao.FromDate)) 69 } 70 71 return strings.Join(errs, ", "), nil 72 }