4 changed files with 113 additions and 2 deletions
@ -0,0 +1,101 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { CardInfo } from '../models/card.model'; |
|||
|
|||
interface CSVInfo |
|||
{ |
|||
Set: string; |
|||
CardNumber: string; |
|||
Count: string; |
|||
IsFoil: boolean; |
|||
} |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
|
|||
export class SWUDBService { |
|||
|
|||
GenerateCSVForCards(cards: Array<CardInfo>) |
|||
{ |
|||
let exportInfo = new Array<any>(); |
|||
for(let index in cards) |
|||
{ |
|||
let card = cards[index] as CardInfo; |
|||
|
|||
if(card.setNumber != -1 && (card.standardQuantity != undefined &&card.standardQuantity > 0)) |
|||
{ |
|||
let info = {} as CSVInfo; |
|||
info.Set = card.setCode; |
|||
info.CardNumber = card.setNumber.toString(); |
|||
info.Count = card.standardQuantity.toString(); |
|||
info.IsFoil = false; |
|||
exportInfo.push(info); |
|||
} |
|||
|
|||
if(card.setNumber != -1 && (card.foilQuantity != undefined &&card.foilQuantity > 0)) |
|||
{ |
|||
let info = {} as CSVInfo; |
|||
info.Set = card.setCode; |
|||
info.CardNumber = card.setNumber.toString(); |
|||
info.Count = card.foilQuantity.toString(); |
|||
info.IsFoil = true; |
|||
exportInfo.push(info); |
|||
} |
|||
|
|||
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceQuantity != undefined &&card.hyperspaceQuantity > 0)) |
|||
{ |
|||
let info = {} as CSVInfo; |
|||
info.Set = card.setCode; |
|||
info.CardNumber = card.hyperspaceSetNumber.toString(); |
|||
info.Count = card.hyperspaceQuantity.toString(); |
|||
info.IsFoil = false; |
|||
exportInfo.push(info); |
|||
} |
|||
|
|||
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceFoilQuantity != undefined &&card.hyperspaceFoilQuantity > 0)) |
|||
{ |
|||
let info = {} as CSVInfo; |
|||
info.Set = card.setCode; |
|||
info.CardNumber = card.hyperspaceSetNumber.toString(); |
|||
info.Count = card.hyperspaceFoilQuantity.toString(); |
|||
info.IsFoil = true; |
|||
exportInfo.push(info); |
|||
} |
|||
} |
|||
|
|||
let separator: string = ','; |
|||
|
|||
let keys = Object.keys(exportInfo[0]); |
|||
let csvContent = |
|||
keys.join(separator) + |
|||
'\n' + |
|||
exportInfo.map(row => |
|||
{ |
|||
return keys.map(k => |
|||
{ |
|||
let cell = row[k] === null || row[k] === undefined ? '' : row[k]; |
|||
cell = cell instanceof Date ? cell.toLocaleString() : cell.toString().replace(/"/g, '""'); |
|||
if (cell.search(/("|,|\n)/g) >= 0) |
|||
{ |
|||
cell = `"${cell}"`; |
|||
} |
|||
return cell; |
|||
}).join(separator); |
|||
}).join('\n'); |
|||
|
|||
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); |
|||
const link = document.createElement('a'); |
|||
if (link.download !== undefined) |
|||
{ |
|||
let now = new Date(Date.now()); |
|||
// Browsers that support HTML5 download attribute
|
|||
const url = URL.createObjectURL(blob); |
|||
link.setAttribute('href', url); |
|||
link.setAttribute('download', "swu_export_" + cards[0].setCode + "_" + now.toISOString()+".csv"); |
|||
link.style.visibility = 'hidden'; |
|||
document.body.appendChild(link); |
|||
link.click(); |
|||
document.body.removeChild(link); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue