wizard999
9/10/2019 - 7:15 AM

Upload image files with model


        [HttpPost("ReturnsGetData"), DisableRequestSizeLimit]
        [ProducesResponseType(typeof(ApiResponse), 200)]
        [ProducesResponseType(typeof(ApiResponse), 400)]
        public IActionResult ReturnsGetData()
        {
            try
            {
                var httpRequest = _httpAccessor.HttpContext.Request;

                ReturnsModel.ReturnData returnData = null;

                var settings = new JsonSerializerSettings
                {
                    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                    Converters = { new StringOrArrayConverter() },
                    Error = (sender, args) =>
                    {
                        if (System.Diagnostics.Debugger.IsAttached)
                        {
                            System.Diagnostics.Debug.Write(args.CurrentObject.ToString());
                            System.Diagnostics.Debugger.Break();
                        }
                    }
                };
                var json = httpRequest.Form["returnData"];
                returnData = JsonConvert.DeserializeObject<ReturnsModel.ReturnData>(json, settings);

                List<Attachment> attachments = new List<Attachment>();
                if (httpRequest.Form.Files.Count > 0)
                {

                    foreach (var file in httpRequest.Form.Files)
                    {
                        if (file.Length > 0)
                        {
                            using (var ms = new MemoryStream())
                            {
                                file.CopyTo(ms);
                                var fileBytes = ms.ToArray();
                                Attachment att = new Attachment(new MemoryStream(fileBytes), file.FileName);
                                attachments.Add(att);
                            }
                        }
                    }
                }


                _dickerDataLogger.Add(LogType.Website, this.GetType().Name,
                                   MethodBase.GetCurrentMethod().Name,
                                   string.Format("Return data: {0}", JsonConvert.SerializeObject(returnData)),
                                   _currentUser.AccountId, _currentUser.LoginId);

                var isSent = SendReturns_Email(attachments, returnData);

                if (isSent)
                {
                    return Ok(new ApiResponse { Status = true, ResponseMessage = "Success" });
                }
                else
                {
                    _dickerDataLogger.Add(LogType.WebsiteError, this.GetType().Name, MethodBase.GetCurrentMethod().Name,  "Returns Get Data Failed", _currentUser.AccountId, _currentUser.LoginId);
                    return Ok(new ApiResponse { Status = false, ResponseMessage = "Failed" });
                }
                
            }
            catch (Exception ex)
            {
                
                _dickerDataLogger.Add(LogType.WebsiteError, this.GetType().Name, "Returns Get Data Failed", ex.Message.ToString(), _currentUser.AccountId, _currentUser.LoginId);
                return BadRequest(new ApiResponse { Status = false, ResponseMessage = ex.Message });
            }

        }

        [NonAction]
        private bool SendReturns_Email(List<Attachment> attachments, ReturnsModel.ReturnData returnData)
        {
            try
            {
                bool isEmailSent = false;
                string emailTemplate = string.Empty;
                string sendTo = string.Empty;
                StringBuilder lineLevelRows = new StringBuilder();


                try
                {
                    emailTemplate = new WebClient().DownloadString(_tools.GetConfigKey("AppConfig", "ReturnForm_EmailTemplate"));
                }
                catch (Exception ex)
                {
                    
                    _dickerDataLogger.Add(LogType.WebsiteError, this.GetType().Name, "Get Returns Email Template Error", ex.Message.ToString(), _currentUser.AccountId, _currentUser.LoginId);

                    return isEmailSent;
                }

                GetLoginDetails.Out user = null;
                var getLoginUserDetails = loginApplicationService.GetLoginInfo(_currentUser.LoginId, _currentUser.AccountId);
                user = getLoginUserDetails.Output.FirstOrDefault();

                emailTemplate = emailTemplate.Replace("#ORDERNUMBER", returnData.OrderNumber + returnData.OrderSuffix ?? "");
                emailTemplate = emailTemplate.Replace("#FULLORPARTIAL", returnData.IsPartialReturn ? "PARTIAL" : "FULL");
                emailTemplate = emailTemplate.Replace("#RESELLERACCOUNTCODE", _currentUser.AccountId);
                emailTemplate = emailTemplate.Replace("#RESELLERACCOUNTNAME", _currentUser.AccountName);
                emailTemplate = emailTemplate.Replace("#WEBLOGINUSERNAME", _currentUser.LoginId);
                emailTemplate = emailTemplate.Replace("#WEBLOGINEMAIL", user.out_email);
                emailTemplate = emailTemplate.Replace("#DATETIME", DateTime.Now.ToString("yyyy-MM-dd h:mm:ss tt"));
                emailTemplate = emailTemplate.Replace("#REASON", returnData.Reason);
                emailTemplate = emailTemplate.Replace("#VENDORREF", returnData.VenderRefNumber);
                emailTemplate = emailTemplate.Replace("#CONDITION", returnData.ConditionOfGoods);
                emailTemplate = emailTemplate.Replace("#COMMENTS", returnData.ReasonDetails);
                emailTemplate = emailTemplate.Replace("#CONTACTNAME", _currentUser.FirstName);
                emailTemplate = emailTemplate.Replace("#CONTACTPHONE", user.out_bus_phone_no ?? "");
                emailTemplate = emailTemplate.Replace("#CONTACTEMAIL", user.out_email);

                var orderDetails = orderApplicationService.GetOrderItemLists(returnData.OrderNumber, returnData.OrderSuffix ?? "", _currentUser.AccountId);

                var returnTotalValue = 0.0;

                foreach (var item in returnData.Items)
                {
                    var unitPrice = "";
                    var linePrice = 0d;
                    if (orderDetails != null && orderDetails.Output.Count > 0)
                    {
                        unitPrice = orderDetails.Output.Where(x => x.out_stock_code == item.Stockcode).FirstOrDefault().out_line_price;
                        linePrice = ((double.Parse(unitPrice)) * (double.Parse(item.ReturnQty)));

                        returnTotalValue += linePrice;

                        unitPrice = "$" + unitPrice;
                        //linePrice = "$" + linePrice;
                    }
                    StringBuilder serials = new StringBuilder();
                    foreach (var serial in item.Serials)
                    {
                        serials.Append("<label>" + serial.SerialNumber + "</label></br>");
                    }

                    lineLevelRows.Append("<tr><td style='padding-top:20px;padding-left:20px;'>" + item.Stockcode + "</td><td style='padding-top:20px;'>" + item.Description + "</td><td style='padding-top:20px;' align='left'>" + serials +
                                                "</td><td style='padding-top:20px;' align='right'>" + item.ReturnQty +
                                                "</td><td style='padding-top:20px;' align='right'>" + unitPrice + "</td>" +
                                                "</td><td style='padding-top:20px;padding-right:20px;' align='right'> $" + linePrice.ToString("0.00") +
                                                "</td></tr>");
                }
                emailTemplate = emailTemplate.Replace("#LINELEVELROWS", lineLevelRows.ToString());
                emailTemplate = emailTemplate.Replace("#RETURNTOTALVALUE", "$" + returnTotalValue.ToString("0.00"));

                var sendFrom = _tools.GetConfigKey("AppConfig", "EmailFrom");
                if (Global.IsAU())
                {
                    emailTemplate = emailTemplate.Replace("#CONTACTBANNER", "https://portal.dickerdata.com.au/resourcefiles/contact-banner.png");
                }
                else
                {
                    emailTemplate = emailTemplate.Replace("#CONTACTBANNER", "https://portal.dickerdata.com.au/resourcefiles/contact-banner-nz.png");

                    sendFrom = _tools.GetConfigKey("AppConfig", "EmailFromNZ");

                }

                string subject = "Dicker Data Returns Form, Account: " + _currentUser.AccountId + ", Account Name: " + _currentUser.AccountName + ", SO: " + returnData.OrderNumber + returnData.OrderSuffix ?? "";

                //_tools.SendEmail("noreplay@dickerdata.com.au", toAddress, subject, emailTemplate, null, "ethan.wei@dickerdata.com.au", true, attachments);

                sendTo = _tools.GetConfigKey("AppConfig", "ReturnForm_EmailSendTo");

                isEmailSent = _tools.SendEmail(sendFrom, sendTo, subject, emailTemplate.ToString(), null, null, true, attachments);

                return isEmailSent;
            }
            catch (Exception ex)
            {
                
                _dickerDataLogger.Add(LogType.WebsiteError, this.GetType().Name, "Send Returns Email Failed", ex.ToString(), _currentUser.AccountId, _currentUser.LoginId);
                return false;
            }
        }
  sendReturnForm() {
     if (this.validateForm()) {
        let returnData = {} as ReturnData;
        this.ordersForReturn = []; //initialize array to empty

        if (this.returnOption === 'full') {  //full returns
          this.originalOrders.forEach(order => {

            this.ordersForReturn.push(order);
          }); 

        } else {  //partial returns
          let allOrder = this.originalOrders.map(x => Object.assign({}, x));
          allOrder.filter(x => x.selected === true).forEach(order => {
            let returnItem = {} as LineItem;
            returnItem = order;

            if (returnItem.serials.length > 0) {
              returnItem.serials =  returnItem.serials.filter(s => s.selected === true);
              returnItem.returnQty = returnItem.serials.length.toString();
            }

            this.ordersForReturn.push(returnItem);
          });

        }

        returnData.orderNumber = this.orderNumber;
        returnData.orderSuffix = this.orderSuffix;
        returnData.isPartialReturn = this.returnOption === 'full' ? false : true;
        returnData.venderRefNumber = this.venderRefNumber;
        returnData.reasonDetails = this.comments;
        returnData.reason = this.selectedReason;
        returnData.conditionOfGoods = this.selectedCondition;
        returnData.items = this.ordersForReturn;
        //returnData.files = this.attachments;
        this.finishSending = false;

        this.orderService.returnsGetData(returnData, this.imageFile).takeUntil(this.ngUnsubscribe)
        .subscribe((res: any) => {
           this.finishSending = true;
           if (res.status === 200) {
             this.commonService.implementToast("Returns have been sent successfully", "Success");
             //this.commonService.showSuccess("#btnSendReturn", "Returns have been sent successfully", "right");
             setTimeout(() => {
              this.router.navigateByUrl('/myAccount');
             }, 1000);
           } else {
            console.info(res.responseMessage);
            this.commonService.implementToast("Unable to send your returns, please try again later", "Error");
            //this.commonService.showError("#btnSendReturn", "Unable to send your returns, please try again later", "right");
           }

        },
        (error: any) => {
          console.error(error);
          this.finishSending = true;
        });

     }
  }
  returnsGetData(returnData: ReturnData, attachment: File): Observable<any> {

    // let options = new RequestOptions({
    //   headers: new Headers({
    //     'Access-Control-Cross-Origin': '*'
    //   })
    // });

    //headers.append('Content-Type', 'multipart/form-data'); 
    //headers.append('Accept', 'application/json');

    let formData = new FormData(); 
    if (attachment != null || attachment != undefined) {
      formData.append(attachment.name, attachment);
    }

    formData.append('returnData', JSON.stringify(returnData));

    return this.http.post(this.base_url + '/ReturnsGetData', formData)
      .pipe(catchError(this.handleError));
  }