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  }