Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow invoices and notices to be loaded by contents, not only via-files #10

Open
MwSpaceLLC opened this issue Feb 3, 2019 · 5 comments

Comments

@MwSpaceLLC
Copy link

MwSpaceLLC commented Feb 3, 2019

Ciao Ale scusa il disturbo.
Abbiamo aggiornato l'applicazione per lavorare esclusivamente con un Filesystem Bucket,
Ci siamo accorti che possiamo passare solamente il contenuto del file e NON la dir.

Esempio funsione load() in FileSdIBase per invio fatture:

       /**
         * Load Signed Invoice from Bucket
         */
        $fileSdI->load(Storage::get($signdir));
        $response = new RispostaSdIRiceviFile($client->RiceviFile($fileSdI));

la funzione GET ci ritorna il contenuto di un file nel Bucket 'PRIVATE': non accessibile.

Ma nella funzione load() file_get_contents ovviamente non può essere instanziato.

    public function load( $invoice )
    {
        if ($invoice instanceOf \Taocomp\Einvoicing\AbstractDocument) {
            $this->NomeFile = $invoice->getFilename();
            $this->File = $invoice->asXML();
        } else if (true === is_readable($invoice)) {
            $this->NomeFile = basename($invoice);
            $this->File = file_get_contents($invoice);
            $this->removeBOM();
        } else {
            throw new \Exception("Invalid file or object '$invoice'");
        }

        return $this;
    }

Anche noi abbiamo dovuto modificare delle librerie perchè non possono più accedere ai file direttamente.

ora, Come facciamo ? Io posso anche modificare la classe, ma le modifiche le perderei all'aggiornamento.

Potresti aggiungere per esempio loadContents() ???
Io l'ho dovuta aggiungere manualmente in DUE FILE:

  • FileSdI.php

    /**
     * @param $filename
     * @param $filecontents
     * @return $this|FileSdIBase
     * @throws \Exception
     */
    public function loadContents($filename, $filecontents)
    {
        parent::loadContents($filename, $filecontents);

        $xml = simplexml_load_string($filecontents);

        if (!$xml->IdentificativoSdI) {
            throw new \Exception("Cannot find 'IdentificativoSdI' File Contents");
        }

        $this->IdentificativoSdI = $xml->IdentificativoSdI;

        return $this;

    }
  • FileSdIBase.php

    /**
     * @param $filename
     * @param $filecontents
     * @return $this
     * @throws \Exception
     */
    public function loadContents($filename, $filecontents)
    {
        $this->NomeFile = $filename;
        $this->File = $filecontents;
        $this->removeBOM();

        return $this;
    }

Ovviamente se l'aggiungi, magari su tutte le funzioni che richiedono una dir file di avere anche la possibilità di passare direttamente anche il contenuto. 😘😘

Aspetto tue, Salutissimi!

@aded
Copy link
Contributor

aded commented Feb 5, 2019

Ok, filesdi e filesdibase stanno in php-sdicoop-client :-) ma ho compreso la questione, più tardi pusho un aggiornamento. Probabilmente aggiungerò un secondo parametro opzionale a load() per il contenuto.

Fare la stessa cosa per la classe FatturaElettronica di questo repo potrebbe richiedere un po' più di tempo invece. Ma adesso vediamo :-)

@aded
Copy link
Contributor

aded commented Feb 5, 2019

Aggiornato php-sdicoop-client, adesso il metodo load può essere usato anche con un secondo parametro come segue:
$fileSdi->load($filename, $contents);

Lascio aperto l'issue come promemoria per fare la stessa cosa qui su AbstractDocument.

@aded aded changed the title File Get Contents Allow invoices and notices to be loaded by contents, not only via-files Feb 5, 2019
@MwSpaceLLC
Copy link
Author

MwSpaceLLC commented Feb 6, 2019

Ale scusa, come ti ho precisato sulla funzione loadcontents()

Il metodo simplexml_load_file() in FileSdI.php non va bene :

    public function load( $file, $contents = null )
    {
        parent::load($file, $contents);
 
        $xml = simplexml_load_file($file);
 
        if (!property_exists($xml, 'IdentificativoSdI')) {
            throw new \Exception("Cannot find 'IdentificativoSdI' in '$file'");
        }
 
        $this->IdentificativoSdI = $xml->IdentificativoSdI;
 
        return $this;
    }

Io avevo utilizzato in metodo simplexml_load_string()

Ora lo modifico io, ma aspetto tue 🐱‍🚀🐱‍🚀 :

/**
   * @param $file
   * @param null $contents
   * @return $this|FileSdIBase
   * @throws \Exception
   */
  public function load($file, $contents = null)
  {
      parent::load($file, $contents);

      if (null !== $contents && is_string($contents)) {

          $xml = simplexml_load_string($contents);
      } else {

          $xml = simplexml_load_file($file);
      }

      if (!property_exists($xml, 'IdentificativoSdI')) {
          throw new \Exception("Cannot find 'IdentificativoSdI' in '$file'");
      }

      $this->IdentificativoSdI = $xml->IdentificativoSdI;
      return $this;
  }

@aded
Copy link
Contributor

aded commented Feb 6, 2019

Pushato bugfix :-)

@sroselli
Copy link

Ciao, ho un db (MYSQL) dove ho i dati utili per poter :

  1. generare una fattura elettronica
  2. Inviare il documento in formato XML alla PA

Non ho capito come poter inviare i dati dal DB ai moduli, in modo da poter generare appunto un documento.
Potresti aiutarmi con qualche esempio ?

Ringrazio in anticipo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants